python - 2番目のスクリプトが実行中か、すでに終了しているかを確認します

原文 python linux process tmux

scriptA.pyscriptB.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'のように呼ばれます

i 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) 
関連記事

python - 関数/リージョンがBeaker / Dogpileにキャッシュされているかどうかをテストする

python - pygameキーボードを使用して画面上のテキストを移動する

python - get_or_createで別のオブジェクトを使用してオブジェクトを更新する方法

python - QmenuをMatplotlib Canvasに正しく配置する

python - nosetestの属性/タグを持つdoctestの選択

python - Pythonでは、getElementsByTagNameを使用できますが、ネストされた構造を保持できますか?

python - ディープコピーをコピーで上書き

python - Pythonのログスケールmatplotlib?

python - プロセス間通信Python [重複]

python - OpenCVを使用した視覚オドメトリ