這是一個常見問題,但閱讀其他執行緒并沒有為我解決問題。我提供了完整路徑以確保我沒有犯任何路徑公式錯誤。
import subprocess
# create batch script
myBat = open(r'.\Test.bat','w ') # create file with writing access
myBat.write('''echo hello
pause''') # write commands to file
myBat.close()
現在我嘗試通過三種不同的方式運行它,在 SO 上找到了它們。在每種情況下,我的 IDE Spyder 都進入忙碌模式并且控制臺凍結。沒有終端視窗彈出或任何東西,沒有任何反應。
subprocess.call([r'C:\\Users\\felix\\folders\\Batch_Script\\Test.bat'], shell=True)
subprocess.Popen([r'C:\\Users\\felix\\folders\\Batch_Script\Test.bat'], creationflags=subprocess.CREATE_NEW_CONSOLE)
p = subprocess.Popen("Test.bat", cwd=r"C:\\Users\\felix\\folders\\Batch_Script\\")
stdout, stderr = p.communicate()
每個都在有和沒有shell=True設定的情況下運行,也有和沒有原始字串、單反斜杠等。你能發現為什么這行不通嗎?
uj5u.com熱心網友回復:
Spyder 并不總是正確處理標準流,因此在使用時您看不到任何輸出并不讓我感到驚訝,subprocess.call因為它通常在同一個控制臺中運行。當在外部 cmd 提示符下執行時,它為什么對您有用,這也是有道理的。
如果您想繼續使用 spyder 終端,但為您的 bat 腳本呼叫一個新視窗,您應該使用以下內容
subprocess.call(["start", "test.bat"], shell=True)
start啟動單獨的命令提示符視窗以運行指定的程式或命令。您需要,shell=True因為它是內置的 cmd 而不是程式本身。然后,您可以像往常一樣將您的 bat 檔案傳遞??給它。
uj5u.com熱心網友回復:
嘿,我有你的問題的解決方案:)
不要使用subprocess而是使用os
例子 :
import os
myBatchFile = f"{start /max} yourFile.bat"
system(myBatchFile)
# "start /max" will run your batch file in new window in fullscreen mode
如果有幫助,請稍后感謝:)
uj5u.com熱心網友回復:
您應該與 open() 一起使用...
with open(r'.\Test.bat','w ') as myBat: myBat.write('echo hello\npause') # 將命令寫入檔案
我在 ide 之外測驗了這條線(通過在 cmd 中運行),它將打開一個新的 cmd 視窗
subprocess.Popen([r'Test.bat'], creationflags=subprocess.CREATE_NEW_CONSOLE)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/372732.html
上一篇:如何檢查程式是否安裝了cmd
