[英]Run tool via Python in cmd does not wait
我正在cmd
通過Python
運行工具。 對於給定目錄中的每個樣本,我希望該工具執行某些操作。 但是,當我在循環中使用process = subprocess.Popen(command)
時,這些命令不會等到其完成后立即出現10條提示。 當我使用subprocess.Popen(command, stdout=subprocess.PIPE)
該命令仍保持黑色,我看不到進度,盡管它確實等到命令完成。
有誰知道一種如何通過cmd
Python
調用外部工具的方法,該方法會等到命令完成並能夠在cmd
顯示該工具的進度后,再執行此操作?
#main.py
for sample in os.listdir(os.getcwd()):
if ".fastq" in sample and '_R1_' in sample and "Temp" not in sample:
print time.strftime("%H:%M:%S")
DNA_Bowtie2.DNA_Bowtie2(os.getcwd()+'\\'+sample+'\\'+sample)
#DNA_Bowtie2.py
# Run Bowtie2 command and wait for process to be finished.
process = subprocess.Popen(command, stdout=subprocess.PIPE)
process.wait()
process.stdout.read()
編輯:命令= Perl或Java命令。 使用以上化妝,由於提示(Perl窗口或Java窗口)保持黑色,因此我看不到工具輸出。
看來您的子流程是分叉的,否則,在流程完成之前,wait()將無法返回。
這里的順序很重要:首先讀取輸出,然后等待。
如果您這樣做:
process.wait()
process.stdout.read()
如果管道緩沖區已滿,您可能會遇到死鎖:子進程在等待stdout時阻塞,並且永遠不會到達末尾;您的程序在wait()
,阻塞而永遠不會到達read()
。
改為
process.stdout.read()
process.wait()
直到EOF為止。
如果您根本不需要該過程的標准輸出,這將適用。
如果您不希望這樣做,則應省略stdout=PIPE
內容。 然后將輸出定向到該提示窗口。 然后,您也可以省略process.stdout.read()
。
通常, process.wait()
應該防止立即運行10個實例。 如果那不起作用,我不知道為什么不...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.