【问题标题】:Running a series commands non-synchronously from a .bat file从 .bat 文件非同步运行一系列命令
【发布时间】:2014-03-11 20:26:50
【问题描述】:

这就是我的情况:我正在从 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 是 exe 吗?您是否尝试过运行类似start /wait "metamap13 -Aq pradaxaText1.txt pradaxa1.out.txt "
  • ss64.com/nt/start.html 还说你应该提供一个标题,或者至少"" 为空。它还以START "" /wait [options] "C:\Program.exe" "-a ParametersInfo" 的形式提供样本
  • 你能不能把你的启动命令换成cmd /C metamap13 -Aq pradaxaText1.txt pradaxa1.out.txt
  • @PsychoData,正在运行的文件具有扩展名:.x86-win32-nt-4 我不确定那是什么,但我不认为它是一个 exe。在 START 之后添加“”也无济于事。
  • 这很奇怪;我认为start /wait 应该成功了。呼叫等待它完成然后继续?

标签: batch-file cmd subprocess


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-08-25
    • 2015-12-23
    • 2017-04-23
    • 1970-01-01
    • 2021-08-20
    • 2019-01-20
    • 1970-01-01
    • 2015-10-13
    • 2012-11-28
    相关资源
    最近更新 更多