基本的には、スクリプトを使用して別のディレクトリにある他のスクリプトを起動し、すべての「子スクリプト」が完了するまでフォローアップ作業を行いたいと考えています。multiprocessing.Pool を使用してすべての子プロセスをまとめ、wait() を使用してすべてが終了するまで待機します。これが私のスクリプトです:
import os, shutil, subprocess,sys, multiprocessing
rootdir=os.getcwd()
argument=[]
def Openpy(inputinfo):
dirpath, filename= inputinfo
os.chdir(dirpath)
return subprocess.Popen( [ 'python', filename ] )
if __name__=="__main__":
for dirpath, dirname , filenames in os.walk(rootdir):
for filename in filenames:
if filename=='Test.py':
argument.append( [ dirpath, filename ] )
print argument
po=multiprocessing.Pool()
r=po.map_async(Openpy, argument)
po.close()
r.wait()
print 'Child scripts are finished'
子プロセスは正常に開始され、1 分で終了します。ただし、それらの子プロセスは「終了メッセージ」を親プロセスに返さないようです。「子スクリプトが終了しました」と表示されませんでした。子プロセスの終了を正しく検出できるようにコードを変更するにはどうすればよいですか?
すべての助けに感謝します!
2013/9/1 9:16 UTC+8
JF Sebastian の回答が受け入れられています。正常に実行され、リスト内包表記をエレガントに使用すると、全体が読みやすくなります。