2012-07-30 32 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