2 回答

TA貢獻1877條經驗 獲得超6個贊
您不需要逐行閱讀 cmd 文件。您可以簡單地嘗試以下操作:
import os
os.system('myfile.cmd')
或使用子流程模塊:
import subprocess
p = subprocess.Popen(['myfile.cmd'], shell = True, close_fds = True)
stdout, stderr = proc.communicate()
例子:
我的文件.cmd:
@ECHO OFF
ECHO Grettings From Python!
PAUSE
腳本.py:
import os
os.system('myfile.cmd')
cmd 將打開:
Greetings From Python!
Press any key to continue ...
您可以通過以下方式了解返回退出代碼來調試問題:
import os
return_code=os.system('myfile.cmd')
assert return_code == 0 #asserts that the return code is 0 indicating success!
注意:os.system 通過在 C 中調用來工作,system()命令后最多只能使用 65533 個參數(因此這是一個 16 位問題)。再提供一個參數將導致返回代碼32512 (which implies the exit code 127).

TA貢獻1856條經驗 獲得超11個贊
該subprocess模塊提供了更強大的工具來生成新進程并檢索它們的結果;使用該模塊優于使用此功能 ( os.system('command'))。
因為它是一個命令文件(cmd),并且只有 shell 可以運行它,那么 shell 參數必須設置為 true。由于您將 shell 參數設置為 true,因此命令需要是字符串形式而不是列表。
使用Popen生成新進程的方法和等待該進程的通信(您也可以將其超時)。如果您希望與子進程通信,請提供PIPES(參見 mu 示例,但您不必這樣做?。?/p>
下面的代碼適用于 python 3.3 及更高版本
import subprocess
try:
proc=subprocess.Popen('myfile.cmd', shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
outs, errs = proc.communicate(timeout=15) #timing out the execution, just if you want, you dont have to!
except TimeoutExpired:
proc.kill()
outs, errs = proc.communicate()
對于舊的 python 版本
proc = subprocess.Popen('myfile.cmd', shell=True)
t=10
while proc.poll() is None and t >= 0:
print('Still waiting')
time.sleep(1)
t -= 1
proc.kill()
在這兩種情況下(python 版本),如果您不需要該timeout功能并且不需要與子進程交互,那么只需使用:
proc = subprocess.Popen('myfile.cmd', shell=True)
proc.communicate()
添加回答
舉報