Windows 10下Python 3.6调用subprocess.Popen无法正常运行程序的问题
解决Windows下Python subprocess调用cmd无输出/报错的问题
嘿,我来帮你搞定这个问题!你遇到的情况是因为调用Windows的cmd.exe时没加必要的参数,导致它根本没执行你想要的echo hi命令。
问题根源
Windows的cmd程序需要通过/c参数来明确告诉它:“执行后面的命令,然后退出”。如果不加这个参数,cmd只会打开一个新的交互窗口,完全忽略你后面的echo和hi参数,自然看不到输出;而check_call报错的3221225786状态码,就是因为cmd接收到无效参数后异常退出导致的。
正确的实现方式
方式1:用subprocess.Popen并捕获输出
如果你想在Python里拿到命令的输出,可以这么写:
import subprocess # 用/c参数让cmd执行命令后退出,同时配置输出捕获 p = subprocess.Popen( ['cmd', '/c', 'echo', 'hi'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True ) # 读取并打印输出 output, _ = p.communicate() print(output)
要是你只想让输出直接显示在当前控制台,不用捕获的话,简化版就行:
import subprocess subprocess.Popen(['cmd', '/c', 'echo hi'])
方式2:用subprocess.check_call
同样加上/c参数,就能正常执行不报错了:
import subprocess subprocess.check_call(['cmd', '/c', 'echo', 'hi'])
额外小技巧
其实对于echo hi这种简单的内置命令,你也可以不用显式调用cmd,直接用shell=True让subprocess自动处理:
subprocess.check_call(['echo', 'hi'], shell=True)
不过个人更推荐显式用cmd /c的写法,这样逻辑更清晰,也能避免一些shell=True带来的潜在风险。
内容的提问来源于stack exchange,提问作者Alsh
相关产品推荐
相关产品推荐

