Python与运行进程交互

时间:2013-12-24 13:59:21

标签: python linux

我有一个python脚本,允许我使用简单的Web服务器(Flask)通过手机与我的Rapsberry Pi进行交互。

在这个脚本中,我可以调用omxplayer来播放媒体文件,我是通过这样的命令来实现的:

Popen(['omxplayer '+filePath], shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)

这样可以正常工作,但我希望能够通过发送键命令与此过程进行交互。当omxplayer运行时,您可以按空格键播放/暂停,箭头键可以向前/向后跳,等等。我想从我的python脚本中以编程方式发送这些键盘输入,而不是要求某人在键盘上手动按下它们。 / p>

如何在用Python打开密钥命令后从Python发送密钥命令?

此外,如何从Python中检测是否还有另一个运行omxplayer的实例 not 当前是从这个Python脚本运行的?例如,如果omxplayer被调用并且是从ssh连接上的某个人运行的,那么如何在python脚本中检测到这个并在调用我自己的omxplayer进程之前终止这个进程?

1 个答案:

答案 0 :(得分:4)

听起来omxplayer正在从stdin读取 - 你可以用你的命令写入该进程'stdin。

from subprocess import Popen, PIPE
p = Popen(['omxplayer', filePath], stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
p.stdin.write(' ') # sends a space to the running process
p.stdin.flush() # if the above isn't enough, try adding a flush

编辑:要发送箭头键,请在终端中尝试 Ctrl + v 然后以查看正在发送的密钥代码 - 它将是^[[D,或 esc [ D 。您可以使用stream.write("\x1b[D")(或"^[[D"输入此值,其中^[ Ctrl + v 生成的一个字符esc 并等待半秒钟。

相关问题