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

标签 batch-file cmd subprocess

这是我的情况:我正在从 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 实际上仍在运行。所以我想到了两种可能的解决方案,但我不知道如何实现:

  1. metamap13 完成运行后自动关闭新的 cmd 窗口。
  2. 仅在 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/

相关文章:

batch-file - 批处理 : Simply Syntax Error : Goto was unexpected at this time

mysql - 如何在不设置环境变量或不在 Windows 中导航 MySQL 服务文件夹的情况下使用 cmd 导航到 MySQL 提示符

python - Supervisord 进程控制 - 停止单个子进程

python - 如何使 readline 在 python 子进程中工作?

Python 在 dos 窗口中无法正确显示简体中文

python - subprocess.Popen 不运行 bash 命令?

batch-file - 如何检查用户是否是管理员?

Windows 批处理文件命令和变量

VBA:运行 "Elevated"命令(Shell 与 ShellExecute)

batch-file - 批处理文件和 DEL 错误级别 0 问题