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

如何使用Python脚本捕获Bash命令的执行输出

如何使用Python脚本捕获Bash命令输出

你之前的代码逻辑走不通,核心原因是sys.stdin.readline()只会读取当前Python进程接收到的标准输入流内容——也就是你手动在键盘敲了传给Python的内容,之前Bash已经执行完、打印到终端屏幕上的输出不会自动流入Python的输入流,自然抓不到结果。

要实现执行Python脚本时拿到指定Bash命令的输出,最稳妥的方式是让Python主动启动要执行的Bash命令,直接接管命令的输出流,以下是可直接用的实现方案:

方案1:用Python标准库subprocess(推荐,无额外依赖)

这是Python官方推荐的外部命令调用方式,不需要安装任何第三方包,兼容性最好。
你要实现执行echo sumit并输出sumit的效果,test.py可以写成下面这样:

import subprocess

# 填写要执行的Bash命令,拆分为列表形式传参更安全,避免注入风险
cmd = ["echo", "sumit"]
# 执行命令,捕获输出流,text=True表示自动把字节流解码为字符串
exec_result = subprocess.run(cmd, capture_output=True, text=True)
# 命令输出末尾默认带换行符,用strip()去掉前后多余空白,拿到纯净结果
pure_output = exec_result.stdout.strip()

print(pure_output)

写完直接执行python test.py,就会直接打印sumit,完全符合需求。

如果要执行带管道、通配符等复杂Shell语法的命令,可以开启shell=True参数,直接传完整命令字符串即可:

import subprocess

# 带管道的复杂命令示例:把sumit转成大写
cmd = "echo sumit | tr 'a-z' 'A-Z'"
exec_result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
print(exec_result.stdout.strip())  # 执行后输出SUMIT

如果需要和持续运行的交互式命令做交互(比如需要中途输入内容的命令),可以用subprocess.Popen实现更灵活的流控制,简单示例:

import subprocess

# 启动命令,接管标准输出流
with subprocess.Popen(["echo", "sumit"], stdout=subprocess.PIPE, text=True) as proc:
    output = proc.stdout.read().strip()
    print(output)

注意:不要尝试通过读取终端缓冲区的方式拿已经打印过的历史命令输出,不同终端模拟器的缓冲区实现逻辑差异极大,没有通用稳定的方案,让Python主动启动目标命令、接管输出流才是正确的实现思路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:27:45