2016-07-21 2 views
2

subprocess.call()を使用するpythonスクリプトscript_a.pyを持っています。終了する前に別のスクリプトscript_b.pyを実行します。 が終了するまで待ってから、独自の手順を進めるには、script_b.pyが必要です。このため私はscript_b.pyのwhileループを使用しています。これどうやってするの?私が試した私の現在の解決策のすべてはscript_b.pyまで待つscript_a.pyが終了する前に終了しています。私はこれがatexit()か何か類似しているかもしれないという気持ちがありますが、私は迷っています。別のpythonスクリプトを実行し、現在のスクリプトをシャットダウンします

多くの感謝!

+0

...私はあなたが代わりに '' subprocess'の 'os.exec *をしたいと思います... –

+0

ガットそれ。 'script_b.py'にそれ自身の中で定義された実行が必要なすべてのものがある場合、exec *関数が私に渡すようにするargのリストで何を渡すことを期待していますか? – Alt182

+0

あなたはおそらく、単に "python"、 "script_b.py"]を渡すことができます...それはしばらくしています... –

答えて

1

あなたには、いくつかの完全ハックがらくた

script_b.py

while not os.path.exists("a.done"):pass 
time.sleep(0.2) # a little longer just to be really sure ... 
os.remove("a.done") 
... # rest of script b 

script_a.py

import atexit 
atexit.register(lambda *a:open("a.done","w")) 
作ることができます

またはその代わりPopenのちょうどあなたが間違った構文を使用しているように聞こえる

os.execl("/usr/bin/python","script_b.py") 
1

あなたscript_a.pyは次のようになります。

import subprocess 
#do whatever stuff you want here 
p = subprocess.Popen(["python","b.py"]) 
p.wait() 
p.terminate() 

#continue doing stuff 
+0

これは 'script_a.py'を閉じます。作業? – Alt182

+0

申し訳ありません私はそれを逆に読む。最後の命令で_a_が_b_を呼び出すと、bが無限ループするまで待つ必要があります。 _a_を呼び出し、_b_を呼び出す別のスクリプト_c_を使用してください。なぜあなたはそれをすることができないのですか? – Javier

+0

したがって、script_bがいつ終了するかにかかわらず、次の命令( 'sis.exit()')でscript_aを続行することはできません。 – Alt182

関連する問題