2014-02-13 170 views
1

所以,這裏是我的情況:我從一個python腳本調用一個.bat文件。我不確定它是否很重要,但我使用python模塊子進程運行該文件。即從.bat文件非同步運行一系列命令

subprocess.call("dir/file.bat", shell=True) 

.bat文件創建依賴於Python腳本執行期間所述用戶輸入,但一般它包含30-40〜行命令來在CMD運行。除了命令的輸入和輸出文件之外,所有這些代碼行都完全相同。例如:

start /wait metamap13 -Aq pradaxaText1.txt pradaxa1.out.txt 
start /wait metamap13 -Aq pradaxaText2.txt pradaxa2.out.txt 
start /wait metamap13 -Aq pradaxaText3.txt pradaxa3.out.txt 

如果我同時調用metamap13 40倍,我的電腦會崩潰,因爲它是如此的內存密集型。正如你看到的,我已經試過

start /wait 

組合,使得第二開始前的第一行會完成。不幸的是,當.bat文件被執行時,它會打開一個新窗口,一旦程序完成運行,窗口不會關閉,因此第二行不會開始,直到我手動關閉新的cmd窗口。將通過此方法處理的數據量很大,這意味着我不能總是可用於關閉數百個新窗口。我也曾嘗試以下操作:

start /wait /B metamap13 -Aq pradaxaText1.txt pradaxa1.out.txt 

我以爲/ B將具有關閉窗口中刪除的問題,但它仍然同時推出的所有代碼40行。我認爲這與調用metamap13被認爲是完成的命令並因此移動到下一行的事實有關,即使metamap實際上仍在運行。所以我想到了兩種可能的解決方案,我無法弄清楚如何實現:

  1. 一旦metamap13運行完成,自動關閉新的cmd窗口。
  2. 一旦metamap13完成,只運行下一行。

任何想法將不勝感激!在metamap13批處理文件正在展開

+0

是metamap13一個exe?您是否嘗試過運行諸如'start/wait「metamap13之類的東西?-Aq pradaxaText1.txt pradaxa1.out.txt 」' – PsychoData

+2

http://ss64.com/nt/start.html還說你應該提供一個標題,或者在最少'「」'爲空。它還提供'START'' /等待[選項]「C:\ Program.exe」「-a ParametersInfo」' – PsychoData

+0

形式的樣本,你可以嘗試用'cmd/C metamap13 -Aq pradaxaText1.txt替換你的啓動命令pradaxa1.out.txt' –

回答

3

的過程在這裏也都參與其中,但嘗試這種與啓動:

call metamap13 -Aq pradaxaText1.txt pradaxa1.out.txt 
call metamap13 -Aq pradaxaText2.txt pradaxa2.out.txt 
call metamap13 -Aq pradaxaText3.txt pradaxa3.out.txt 
+0

看起來這是正常工作!謝謝! – Shakesbeery