从.bat文件非同步运行一系列命令

时间:2014-02-13 05:39:06

标签: batch-file cmd subprocess

所以这是我的情况:我从python脚本调用.bat文件。我不确定它是否重要,但我使用python模块子进程运行该文件。即。

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

.bat文件的创建取决于python脚本执行期间的用户输入,但通常它包含在cmd中运行的~30-40行命令。除了命令的输入和输出文件之外,所有这些代码行完全相同。例如:

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完成后,只运行下一行。
  3. 任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:4)

此处还涉及metamap13批处理文件中启动的流程,但请尝试以下步骤开始:

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