2014-02-13 252 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