将键盘输入发送到正在运行的进程linux

时间:2010-10-10 19:29:37

标签: linux perl keystroke

我正在开发一个mp3播放器的网络界面(mpg123 linux)。 mpg123是一个命令行MP3播放器,可以使用键盘输入进行控制。例如:

$ mpg123 -C filename.mp3

它将开始播放歌曲并监控键盘输入以进行控制。按's'将暂停歌曲'q'以退出等。

我使用Perl脚本生成一个mpg123进程。从该脚本我想将输入发送到此过程。我有进程的pid,我只需要将键击发送到此进程以进行控制。

1 个答案:

答案 0 :(得分: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来写入伪终端。