使用Python脚本切换进程(运行时终止,不运行时启动)

时间:2014-01-22 08:28:10

标签: python linux shell scripting xbmc

我目前正在Raspberry Pi上运行OpenELEC(XBMC)安装,并安装了一个名为“Hyperion”的工具来处理连接的流光溢彩。在Python编程方面,我是一个完全的菜鸟,所以这是我的问题:

如何运行一个脚本来检查名称中是否有正在运行的特定字符串的进程,并执行以下操作:

  • 在正在运行的过程中终止进程
  • 在未运行时启动该过程

这样做的目的是让一个脚本切换流光溢彩。知道如何实现这个目标吗?

2 个答案:

答案 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"])