2010-10-10 113 views
6

我正在開發一個mp3播放器(mpg123 linux)的web界面。 mpg123是一個命令行的MP3播放器,可以使用鍵盤輸入進行控制。例如:發送鍵盤輸入到正在運行的進程linux

$ mpg123 -C filename.mp3 

它會開始播放歌曲,並監視控制鍵盤輸入。按's'將暫停歌曲'q'退出等。

我使用Perl腳本產生mpg123進程。從那個腳本我想發送輸入到這個過程。我有這個過程的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 

第二次嘗試多個腳本調用:在交互式shell中輸入tty。這會給你一個僞終端名稱。現在在這個shell中啓動你的播放器。在另一個shell中,寫入該僞終端。例如。 echo "s" > /dev/pts/11。玩家將收到這個作爲輸入。如果這樣做,使用你的perl腳本而不是echo來寫入僞終端。

+0

感謝彼得,我對這個解決方案有一些問題。使用這種方法,我無法對mpg123進行非阻塞呼叫。我需要啓動MP3播放器,我的腳本應該退出。當再次調用腳本時(使用其他參數(如「停止」))。它應該發送一個停止信號給正在運行的進程。 – 2010-10-10 20:48:04