2 回答
TA贡献1827条经验 获得超9个赞
您不需要逐行阅读 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
script.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贡献1824条经验 获得超8个赞
该subprocess模块提供了更强大的工具来生成新进程并检索它们的结果;使用该模块优于使用此功能 ( os.system('command'))。
因为它是一个命令文件(cmd),并且只有 shell 可以运行它,那么 shell 参数必须设置为 true。由于您将 shell 参数设置为 true,因此命令需要是字符串形式而不是列表。
使用Popen生成新进程的方法和等待该进程的通信(您也可以将其超时)。如果您希望与子进程通信,请提供PIPES(参见 mu 示例,但您不必这样做!)
下面的代码适用于 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()
添加回答
举报