我需要检查scriptA.py
中的ascriptB.py
是否仍在运行。两者都是单独启动的,但只有当scriptB.py
仍在运行时,scriptA.py
才能继续。
我知道我需要
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"
但脚本a在tmux会话中运行。它被称为
tmux new -d -s scriptA_2014-12-09-10-54-02-697559 'cd /home/user/scriptA; python scriptA.py -flag; echo $? > /tmp/scriptA_2014-12-09-10-54-02-697559'
如果我
pgrep scriptA.py
它不返回PID
。pgrep tmux
可以工作,但可能还有其他tmux会话,所以我不能使用它。我可以做一些类似于
ps aux | grep scriptA.py | wc -l
的事情,检查行数-但这感觉它是非常可变的。否则我如何验证
scriptA.py
是否正在运行? 最佳答案
我现在使用PID
,在脚本执行时写入文件。我使用的代码似乎适用于我的案例:
在scriptA
中,执行开始时:
pidf = open("./scriptA_pid.tmp","w")
pidf.write(str(os.getpid()))
pidf.close()
在
scriptB
中,在需要执行的循环开始时,直到完成scriptA
为止。with open("./scriptA_pid.tmp","r") as f:
scriptA_pid = f.read()
chk_sA = subprocess.Popen(['kill -0 '+str(scriptA_pid)+' > /dev/null 2>&1; echo $?'],stdout=subprocess.PIPE,stderr=devnull,shell=True)
chk_sA.wait()
sA_status = chk_sA.stdout.read()
if int(sA_status) == 0:
#ScriptA is still running
pass
else:
#ScriptA is not running
sys.exit(0)