用Pythonscript切换进程(运行时终止,不运行时启动)

2024-05-08 02:43:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个OpenELEC(XBMC)安装在Raspberry Pi上,并安装了一个名为“Hyperion”的工具来处理连接的Ambilight。说到Python编程,我是个十足的傻瓜,所以我的问题是:

如何运行脚本来检查名称中包含特定字符串的进程是否正在运行,以及:

  • 在进程运行时终止它
  • 在进程未运行时启动它

这样做的目的是有一个脚本来切换环境光。有什么办法吗?在


Tags: 工具字符串目的脚本名称进程编程pi
2条回答

您可能想看看^{}模块,它可以从Python运行shell命令。例如,看看this answer。然后您可以得到stdout from the shell command to a variable。我想您需要^{}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)

我用bash作为进程在Ubuntu中测试了这段代码,它按预期工作。在你的评论中,你注意到你得到了file not found错误。您可以尝试将pidof的完整路径放入check_output调用中。这可以从终端使用which pidof找到。我的系统代码会变成

^{pr2}$

你的道路可能不同。在windows上,将shell=True添加到check_output参数可以解决这个问题,但我认为这与Linux无关。在

非常感谢你的帮助,威尔·哈特,我终于成功了。需要更改一些细节,因为脚本一直说“output”没有定义。现在是这样的:

#!/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"])

相关问题 更多 >