You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:45:00