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

Python中如何抑制终端输出同时将shell命令执行结果保存到变量

问题原因

你当前的写法直接在shell命令中添加了> /dev/null 2>&1重定向规则,把命令的标准输出(stdout)、标准错误输出(stderr)全部丢弃到了空设备,check_output只能捕获命令的stdout内容,自然拿不到任何执行结果。
另外补充一个macOS下security命令的特性:使用-ga参数查询密码时,密码内容默认会输出到stderr而非stdout,仅捕获stdout也会导致拿不到密码。

解决方案

不要在shell命令中手动添加输出重定向规则,直接通过subprocess模块的内置参数捕获进程的所有输出,只要输出没有被定向到当前终端,就不会产生终端打印,同时所有输出内容都会被保存到变量中。

方案1:使用subprocess.run(更推荐,兼容性好、可控性强)

import subprocess

cmd_result = subprocess.run(
    "security find-generic-password -ga test",
    shell=True,
    capture_output=True,  # 捕获stdout和stderr,不会输出到终端
    text=True  # 直接返回字符串格式结果,无需手动解码
)

# 密码内容存储在stderr中
wifi_password = cmd_result.stderr.strip()
# 如需命令的标准输出,取cmd_result.stdout即可

方案2:继续使用check_output

需要额外指定把stderr合并到stdout中捕获:

from subprocess import check_output, STDOUT

raw_result = check_output(
    "security find-generic-password -ga test",
    shell=True,
    stderr=STDOUT  # 把stderr合并到stdout中统一捕获
)

# 字节串转字符串
wifi_password = raw_result.decode("utf-8").strip()

内容的提问来源于stack exchange,提问作者user16965639

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:24:03