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

Pun*_*oni 6 linux perl keystroke

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

$ mpg123 -C filename.mp3
Run Code Online (Sandbox Code Playgroud)

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

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

Pet*_* G. 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
Run Code Online (Sandbox Code Playgroud)

第二次尝试多个脚本调用:在交互式shell中输入tty.这将为您提供一个伪终端名称.现在在这个shell中启动你的播放器.在另一个shell中,写入该伪终端.例如echo "s" > /dev/pts/11.玩家将收到此作为输入.如果这样可行,请使用perl脚本而不是echo来写入伪终端.