如何强制Python使用CMD而非PowerShell执行命令并获取输出
解决方案
核心实现方式
你可以直接显式指定调用cmd.exe并携带/c参数执行目标命令,完全规避系统默认shell的影响,适配你原有业务逻辑的代码如下:
import subprocess import json climain = "sfdx force:org:list" # 显式调用cmd执行命令,/c参数表示执行完成后自动退出cmd进程 query = subprocess.check_output( ["cmd.exe", "/c", climain], encoding="utf-8" # 如果返回结果乱码,可尝试替换为gbk ) return json.loads(query)
原Popen写法异常原因
你之前的写法没有拿到预期输出有两个核心问题:
- 传入
communicate的命令没有加换行符,cmd会判定命令未输入完成,一直处于等待输入状态,只会返回cmd启动的默认欢迎信息 - 没有手动触发cmd进程退出,执行完目标命令后需要追加
exit命令关闭进程
如果要使用stdin写入命令的方式实现,正确写法如下:
import subprocess proc = subprocess.Popen( 'cmd.exe', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='gbk' # 适配Windows cmd默认编码 ) # 末尾追加\n表示命令输入完成,执行exit后自动退出cmd进程 stdout, stderr = proc.communicate('ipconfig\nexit\n') print(stdout)
内容的提问来源于stack exchange,提问作者CoderButBeginner
相关产品推荐
相关产品推荐

