使用shell子进程确定第二个脚本是否仍在运行

时间:2014-12-02 15:46:39

标签: python linux shell subprocess stdout

我有两个半依赖的python脚本。即使ScriptB没有,ScriptA也应该运行。相反,ScriptB只应在ScriptA运行时继续。

我的想法就像是

 proc = subprocess.Popen(["ps aux | grep scriptA.py | wc -l"],shell=True,STDOUT=X)

并以某种方式检查结果是否为2(由于grep而为1)。

我在python控制台中测试时收到2,但是我很难保存stdout。试图使用stdout=variable,但失败了。当我使用string子流程失败时(使用c2pwrite = stdout.fileno()),当使用int时,它始终为0.

2 个答案:

答案 0 :(得分:2)

你可以这样做:

import subprocess

process = subprocess.Popen(['pgrep', 'scriptA.py'], stdout=subprocess.PIPE)

process.wait()

if not process.returncode:
    print "Process running"
else:
    print "Process not running"

在这里,我使用pgrep搜索进程,并检查其返回代码而不是其输出。

如果您想使用标准输出,可以使用process.stdout。 它是一个类似对象的文件。

答案 1 :(得分:1)

为什么不使用Popen.poll()?如果它返回None,则该进程尚未终止。如果它返回一个数字,那么它就是该过程的退出代码。