簡體   English   中英

通過cmd中的Python運行工具無需等待

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM