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

Python 使用shell子进程确定第二个脚本是否仍在运行,python,linux,shell,subprocess,stdout,Python,Linux,Shell,Subprocess,Stdout,我有两个半依赖python脚本。ScriptA应该运行,即使ScriptB没有运行。只有在ScriptA正在运行时,ScriptB才应该继续 我的想法是 proc = subprocess.Popen(["ps aux | grep scriptA.py | wc -l"],shell=True,STDOUT=X) 然后以某种方式检查结果是否为2(由于grep,结果可能是1) 在python控制台中测试时,我收到了2,但我很难保存标准输出。尝试使用stdout=variable,但失败。当我

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

我的想法是

 proc = subprocess.Popen(["ps aux | grep scriptA.py | wc -l"],shell=True,STDOUT=X)
然后以某种方式检查结果是否为
2
(由于grep,结果可能是
1

在python控制台中测试时,我收到了
2
,但我很难保存标准输出。尝试使用
stdout=variable
,但失败。当我使用
string
时,子进程失败(使用
c2pwrite=stdout.fileno()
),当使用
int
时,它总是0。

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

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

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

为什么不使用?如果返回
None
,则进程尚未终止。如果它返回一个数字,则是进程的退出代码。

您可以执行以下操作:

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
。 它是一个类似文件的对象。

您可以执行以下操作:

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
。 它是一个类似文件的对象。

您可以执行以下操作:

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
。 它是一个类似文件的对象。

您可以执行以下操作:

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


它是一个类似文件的对象。

我喜欢它,但是stdout=open('/dev/null',w')、stderr=subprocess.stdout如何?@tdelaney当然,如果您不关心输出,可以将其重定向到/dev/null。这不会改变返回代码,上面的代码仍然有效。顺便说一句,
os.devnull
可用于获取跨平台表单文件路径。感谢您的建议!我会试试看,然后报告结果@Fedalto:如果
pgrep
生成的输出溢出其标准操作系统管道缓冲区,则代码可能会在
process.wait()上死锁。tdelaney的
DEVNULL
方法避免了这种情况,应该在一般情况下使用。我喜欢它,但是
stdout=open('/dev/null',w'),stderr=subprocess.stdout
?@tdelaney当然,如果您不关心输出,可以将其重定向到/dev/null。这不会改变返回代码,上面的代码仍然有效。顺便说一句,
os.devnull
可用于获取跨平台表单文件路径。感谢您的建议!我会试试看,然后报告结果@Fedalto:如果
pgrep
生成的输出溢出其标准操作系统管道缓冲区,则代码可能会在
process.wait()上死锁。tdelaney的
DEVNULL
方法避免了这种情况,应该在一般情况下使用。我喜欢它,但是
stdout=open('/dev/null',w'),stderr=subprocess.stdout
?@tdelaney当然,如果您不关心输出,可以将其重定向到/dev/null。这不会改变返回代码,上面的代码仍然有效。顺便说一句,
os.devnull
可用于获取跨平台表单文件路径。感谢您的建议!我会试试看,然后报告结果@Fedalto:如果
pgrep
生成的输出溢出其标准操作系统管道缓冲区,则代码可能会在
process.wait()上死锁。tdelaney的
DEVNULL
方法避免了这种情况,应该在一般情况下使用。我喜欢它,但是
stdout=open('/dev/null',w'),stderr=subprocess.stdout
?@tdelaney当然,如果您不关心输出,可以将其重定向到/dev/null。这不会改变返回代码,上面的代码仍然有效。顺便说一句,
os.devnull
可用于获取跨平台表单文件路径。感谢您的建议!我会试试看,然后报告结果@Fedalto:如果
pgrep
生成的输出溢出其标准操作系统管道缓冲区,则代码可能会在
process.wait()上死锁。tdelaney的
DEVNULL
方法避免了这种情况,应该在一般情况下使用它。然而ScriptA并不是ScriptB的子过程,这会起作用吗。。我想我误解了您的意思,您是想在python文档“检查子进程是否已终止”中的
ps aux | grep ScriptA.py
上使用
Popen.poll()。然而ScriptA并不是ScriptB的子过程,这会起作用吗。。我想我误解了您的意思,您是想在python文档“检查子进程是否已终止”中的
ps aux | grep ScriptA.py
上使用
Popen.poll()。然而ScriptA并不是ScriptB的子过程,这会起作用吗。。我想我误解了您的意思,您是想在python文档“检查子进程是否已终止”中的
ps aux | grep ScriptA.py
上使用
Popen.poll()。然而ScriptA并不是ScriptB的子过程,这会起作用吗。。我想我误解了你的意思,你想在
ps aux|grep ScriptA.py上使用
Popen.poll()
,对吗?对所有脚本使用pid文件:对所有脚本使用pid文件:对所有脚本使用pid文件:对所有脚本使用pid文件