2012-07-30 31 views
6

在Windows中,我运行,目前与“暂停”结束,并提示用户蝙蝠脚本“按任意键继续......”在Windows中禁用脚本蝙蝠“暂停”

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

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

+0

我相信'pause'是内置到'cmd'解释程序,所以它不可能取代它。否则,您可以创建一个'pause.exe'并将它放在路径的前面。 – 2012-07-30 21:09:30

+0

我不明白为什么管道输入不起作用,你可以从命令行重定向:'pause 2012-07-30 21:12:05

回答

11

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

YourCmdFile - 完整路径批处理脚本

+1

+1,但是不需要cmd.exe。直接执行脚本:'script.bat dbenham 2012-07-31 13:43:51

+0

我推荐'cmd/c',因为“这个脚本是通过subprocess.Popen从python运行的”。不知道,python如何执行脚本。 – Maximus 2012-07-31 14:18:45

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 =真没工作,因为在二进制空间使其窒息试图找到可执行文件。

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

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

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

不理想,但它完成了工作。

如果有人知道如何得到最后一个子进程的例子来处理二进制文件中的空间,这将是非常感谢!

2
subprocess.call("mybat.bat", stdin=subprocess.DEVNULL) 

能打电话mybat.batnul在Windows重定向输入(即禁用暂停如在其他的答案)

+1

请注意,只适用于Python 3.在Python 2.x中,您必须获得devnull的文件句柄(例如'devnull = open(os.devnull,'r')')并将其作为标准输入传递。 – 2016-02-29 21:07:33

+0

@BrentNash好抓。我最终使用你的Python2/3兼容性。确保在完成后关闭文件以避免资源泄漏(在这种情况下,Python 3引发了警告)。 – 2016-06-13 22:50:56