2010-10-10 45 views
6

Sto sviluppando l'interfaccia web per un lettore mp3 (mpg123 linux). Mpg123 è un lettore mp3 da riga di comando e può essere controllato tramite gli input da tastiera. Ad esempio:Invia input da tastiera a un processo in esecuzione linux

$ mpg123 -C filename.mp3 

inizierà a riprodurre gli ingressi della tastiera e del monitor per il controllo. Premendo 's' si interrompe il brano 'q' per uscire, ecc.

Sto generando un processo mpg123 utilizzando uno script Perl. Da quello script voglio inviare input a questo processo. Ho il pid del processo, ho solo bisogno di inviare sequenze di tasti a questo processo per scopi di controllo.

risposta

6

Devi solo generare il tuo lettore mp3 come pipe da Perl. In questo modo:

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

secondo tentativo per molteplici invocazioni di script: In una shell interattiva entrare tty. Questo ti darà un nome pseudo-terminale. Ora inizia il tuo giocatore in questa shell. In un'altra shell, scrivi su quello pseudo-terminale. Per esempio. echo "s" > /dev/pts/11. Il giocatore riceverà questo come input. Se funziona, usa lo script perl invece di echo per scrivere sullo pseudo-terminale.

+0

Grazie Peter, ho qualche problema con questa soluzione. Utilizzando questo metodo, non sono in grado di effettuare una chiamata non bloccante a mpg123. Ho bisogno di avviare il lettore mp3 e il mio script dovrebbe uscire. Quando lo script viene chiamato di nuovo (con altri parametri come "stop"). Dovrebbe inviare un segnale di stop al processo in esecuzione. –

Problemi correlati