簡體   English   中英

檢查第二個腳本是否正在運行或已經完成

[英]Check if second script is running or already finished

我需要檢查,如果一個scriptA.py仍在運行,在scriptB.py 兩者都是單獨啟動的,但是只有在scriptA.py仍在運行時, scriptB.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' 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事情ps aux | grep scriptA.py | wc -l ps aux | grep scriptA.py | wc -l 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) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM