2010-10-10 22 views
6

Pracuję nad interfejsem internetowym odtwarzacza mp3 (mpg123 linux). The mpg123 to odtwarzacz mp3 z wiersza poleceń, który można kontrolować za pomocą wejść klawiatury. Na przykład:Wyślij dane wejściowe z klawiatury do działającego procesu linux

$ mpg123 -C filename.mp3 

rozpocznie odtwarzanie utworu i monitoruje wejścia klawiatury w celu sterowania. Naciśnięcie 's' wstrzyma piosenkę 'q' dla wyjścia itp.

Występuję proces mpg123 przy użyciu skryptu Perla. Z tego skryptu chcę wysłać dane wejściowe do tego procesu. Mam pid procesu, po prostu muszę wysłać naciśnięcia klawiszy do tego procesu w celu kontroli.

Odpowiedz

6

Musisz tylko odrodzić odtwarzacz MP3 jako potok z perla. Tak:

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

drugą szansę dla wielu wywołań skryptu: W interaktywnej powłoki wprowadzić tty. To da ci pseudo-terminalną nazwę. Teraz uruchom odtwarzacz w tej powłoce. W innej powłoce napisz do tego pseudo-terminala. Na przykład. echo "s" > /dev/pts/11. Gracz otrzyma to jako dane wejściowe. Jeśli to działa, użyj skryptu perl zamiast echa, aby napisać do pseudo-terminala.

+0

Dzięki Peter, mam pewne problemy z tym rozwiązaniem. Korzystając z tej metody, nie jestem w stanie wykonać nieblokującego połączenia z mpg123. Muszę uruchomić odtwarzacz mp3 i mój skrypt powinien wyjść. Kiedy skrypt zostanie wywołany ponownie (z innymi parametrami, takimi jak "stop"). Powinien wysłać sygnał zatrzymania do uruchomionego procesu. –

Powiązane problemy