python - 检查第二个脚本是否正在运行或已经完成

标签 python linux process tmux

我需要检查 scriptA.py 是否仍在运行,在 scriptB.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 session 中运行。其名称类似于 tmux new -d -s scriptA_2014-12-09-10-54-02-697559 'cd/home/user/scriptA; python scriptA.py-标志;回声$? >/tmp/scriptA_2014-12-09-10-54-02-697559'

如果我 pgrep scriptA.py 它不会返回 PIDpgrep tmux 可以工作,但可能还有其他 tmux session ,所以我不能使用它。

我可以做一些像ps aux | grep 脚本A.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) 

关于python - 检查第二个脚本是否正在运行或已经完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27376160/

相关文章:

python - Django 社区是否广泛使用基于类的 View ?

c++ - 在 Linux 中使用 Netbeans 调试具有 GUI 前端的 C++ 源代码

c - 以 root 身份运行程序时出现奇怪的结果

linux - 检查bash中多个变量的输出

node.js - 无法使用 Windows 读取 $process.env.NODE_ENV

python - SQLAlchemy SessionTransaction 有查询属性吗?

python - MQTT msg.payload 有趣的字符

python - Popen.communicate() 抛出 OSError : "[Errno 10] No child processes"

c++ - 如何使用 POSIX 在 C++ 中执行命令并获取命令的输出?

android - 当另一个 Ruby 子进程完成时终止一个 Ruby 子进程