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

8

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

$ mpg123 -C filename.mp3

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

我正在使用Perl脚本生成mpg123进程。从该脚本中,我想向该进程发送输入。我有该进程的pid,只需发送按键以进行控制。

1个回答

6
您只需要将您的mp3播放器作为perl的管道产生。像这样:

您只需将您的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 来写入该伪终端。


谢谢Peter,我对这个解决方案有些问题。使用这种方法,我无法对mpg123进行非阻塞调用。我需要启动mp3播放器并使我的脚本退出。当再次调用脚本(带有其他参数,如“停止”)时,它应该向正在运行的进程发送停止信号。 - Punit Soni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接