这是我的情况:我正在从 python 脚本调用 .bat 文件。我不确定这是否重要,但我使用 python 模块子进程运行该文件。即
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 实际上仍在运行。所以我想到了两种可能的解决方案,但我不知道如何实现:
- metamap13 完成运行后自动关闭新的 cmd 窗口。
- 仅在 metamap13 完成后运行下一行。
如有任何想法,我们将不胜感激!
最佳答案
此处也涉及 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
关于batch-file - 从 .bat 文件非同步运行一系列命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21746118/