我目前正在Raspberry Pi上运行OpenELEC(XBMC)安装,并安装了一个名为“Hyperion”的工具来处理连接的流光溢彩。在Python编程方面,我是一个完全的菜鸟,所以这是我的问题:
如何运行一个脚本来检查名称中是否有正在运行的特定字符串的进程,并执行以下操作:
这样做的目的是让一个脚本切换流光溢彩。知道如何实现这个目标吗?
答案 0 :(得分:1)
您可能希望查看可以从Python运行shell命令的subprocess
模块。例如,看看this answer。然后,您可以获得stdout from the shell command to a variable。我怀疑你需要pidof
shell命令。
基本思路如下:
import subprocess
try:
subprocess.check_output(["pidof", "-s", "-x", "hyperiond"])
except subprocess.CalledProcessError:
# spawn the process using a shell command with subprocess.Popen
subprocess.Popen("hyperiond")
else:
# kill the process using a shell command with subprocess.call
subprocess.call("kill %s" % output)
我在Ubuntu中使用bash
作为进程测试了此代码,它按预期工作。在您的评论中,您注意到您收到file not found
错误。您可以尝试在pidof
来电中填写check_output
的完整路径。这可以从终端使用which pidof
找到。然后我的系统代码将成为
subprocess.check_output(["/bin/pidof", "-s", "-x", "hyperiond"])
您的路径可能有所不同。在Windows上向shell=True
参数添加check_output
修复了此问题,但我认为这与Linux无关。
答案 1 :(得分:1)
非常感谢你的帮助@ will-hart,我终于明白了。需要更改一些细节,因为脚本一直说“输出”没有定义。现在看来是这样的:
#!/usr/bin/env python
import subprocess
from subprocess import call
try:
subprocess.check_output(["pidof", "hyperiond"])
except subprocess.CalledProcessError:
subprocess.Popen(["/storage/hyperion/bin/hyperiond.sh", "/storage/.config/hyperion.config.json"])
else:
subprocess.call(["killall", "hyperiond"])