9

在 Windows 中,我正在运行一个 bat 脚本,该脚本当前以“暂停”结尾并提示用户“按任意键继续...”

在这种情况下我无法编辑文件,我需要终止脚本而不是挂起等待永远不会出现的输入。有没有办法可以运行它来禁用或规避提示?

我尝试过输入管道,但似乎没有帮助。这个脚本是通过 subprocess.Popen 从 python 运行的。

4

4 回答 4

18

尝试执行cmd.exe /c YourCmdFile < nul

YourCmdFile- 批处理脚本的完整路径

于 2012-07-30T21:13:07.867 回答
5
subprocess.call("mybat.bat", stdin=subprocess.DEVNULL)

将在 Windows 上调用mybat.bat和重定向输入nul(如其他答案所示禁用暂停)

于 2016-01-12T17:26:30.923 回答
4

事实证明,这有点痛苦。来自 Maximus 的 nul 重定向效果很好,谢谢!

至于让它在 python 中工作,它归结为以下内容。我开始:

BINARY = "C:/Program Files/foo/bar.exe"
subprocess.call([BINARY])

试图添加重定向,但 subprocess.call 很好地逃避了一切,我们失去了重定向。

subprocess.call([BINARY + " < nul"])
subprocess.call([BINARY, " < nul"])
subprocess.call([BINARY, "<", "nul"])

使用 shell=True 不起作用,因为 BINARY 中的空间使它在试图找到可执行文件时窒息。

subprocess.call([BINARY + " < nul"], shell=True)

最后,我不得不求助于 os.system 并逃避自己以获得重定向。

os.system(quote(BINARY) + " < nul")

不理想,但它可以完成工作。

如果有人知道如何让最后一个子进程示例与二进制文件中的空间一起工作,那将不胜感激!

于 2012-07-31T14:40:26.773 回答
0

对我来说,以下代码有效:

p = Popen("c:\script.bat <nul", cwd="c:\")
于 2019-01-25T09:51:49.520 回答