基本上,我想使用腳本在不同的目錄中啓動其他腳本,並執行後續工作,直到完成所有「子腳本」爲止。我使用multiprocessing.Pool將所有子進程放在一起,並使用wait()等待所有完成。這是我的腳本:如何使用python腳本啓動其他python腳本並檢查所有「子腳本」是否完成?
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'
子進程正常啓動,並在一分鐘內完成。但是,這些子進程似乎沒有將其「完成的消息」返回給父進程。它沒有顯示「兒童腳本完成」。我能做些什麼來改變我的代碼,以便它可以正確檢測子進程的結束?
所有幫助表示讚賞!
2013年9月1日9:16 UTC + 8
J.F.塞巴斯蒂安的答案被接受。成功運行,清單理解的優雅用法使整個東西更具可讀性。
縮進?我認爲最後一行也應該縮進一個'tab'。 – pwagner