2010-10-10 4 views
6

Я разрабатываю веб-интерфейс для mp3-плеера (mpg123 linux). Mpg123 - это mp3-плеер с командной строкой и может управляться с помощью клавиатурных входов. Например:Отправка ввода клавиатуры в выполняемый процесс linux

$ mpg123 -C filename.mp3 

он начнет воспроизводить песни и контролировать входы клавиатуры для управления. Нажатие 's' приостанавливает песню «q» для выхода и т. Д.

Я создаю процесс mpg123 с использованием скрипта Perl. Из этого сценария я хочу отправить данные для этого процесса. У меня есть pid процесса, мне просто нужно отправить нажатия клавиш для этого процесса для целей управления.

ответ

6

Вам просто нужно создать своего mp3-плеера как трубку от perl. Как так:

$| = 1; # Set unbuffered output. 
open(my $mp3player, "| mpg123") or die "cannot start mp3 player: $!"; 
print $mp3player "s"; 
... 
print $mp3player "q"; 
close $mp3player 

Вторая попытка для нескольких вызовов сценария: В интерактивной оболочке введите tty. Это даст вам псевдотерминальное имя. Теперь запустите плеер в этой оболочке. В другой оболочке напишите на этот псевдотерминал. Например. echo "s" > /dev/pts/11. Игрок получит это как вход. Если это работает, используйте свой скрипт perl вместо echo для записи на псевдотерминал.

+0

Спасибо, Питер, у меня есть некоторые проблемы с этим решением. Используя этот метод, я не могу сделать неблокирующий вызов mpg123. Мне нужно запустить mp3-плеер, и мой скрипт должен выйти. Когда сценарий вызывается снова (с другими параметрами, такими как «stop»). Он должен отправить сигнал останова на текущий процесс. –

Смежные вопросы