2 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
您不需要逐行閱讀 cmd 文件。您可以簡(jiǎn)單地嘗試以下操作:
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
script.py:
import os
os.system('myfile.cmd')
cmd 將打開(kāi):
Greetings From Python!
Press any key to continue ...
您可以通過(guò)以下方式了解返回退出代碼來(lái)調(diào)試問(wèn)題:
import os
return_code=os.system('myfile.cmd')
assert return_code == 0 #asserts that the return code is 0 indicating success!
注意:os.system 通過(guò)在 C 中調(diào)用來(lái)工作,system()命令后最多只能使用 65533 個(gè)參數(shù)(因此這是一個(gè) 16 位問(wèn)題)。再提供一個(gè)參數(shù)將導(dǎo)致返回代碼32512 (which implies the exit code 127).

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
該subprocess模塊提供了更強(qiáng)大的工具來(lái)生成新進(jìn)程并檢索它們的結(jié)果;使用該模塊優(yōu)于使用此功能 ( os.system('command'))。
因?yàn)樗且粋€(gè)命令文件(cmd),并且只有 shell 可以運(yùn)行它,那么 shell 參數(shù)必須設(shè)置為 true。由于您將 shell 參數(shù)設(shè)置為 true,因此命令需要是字符串形式而不是列表。
使用Popen生成新進(jìn)程的方法和等待該進(jìn)程的通信(您也可以將其超時(shí))。如果您希望與子進(jìn)程通信,請(qǐng)?zhí)峁㏄IPES(參見(jiàn) 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()
對(duì)于舊的 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功能并且不需要與子進(jìn)程交互,那么只需使用:
proc = subprocess.Popen('myfile.cmd', shell=True)
proc.communicate()
添加回答
舉報(bào)