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

如何在Python中获取终端命令输出并存储为可解析字符串?

捕获系统命令输出的Python方案

你说得对,os.system()确实只能返回表示执行结果的整数退出码(0代表成功,非0代表错误),没法直接获取命令打印到终端的输出内容。在Python中,官方推荐使用**subprocess模块**来实现捕获命令输出的需求,这也是替代os.system的标准方案。

下面是几种常用的实现方式:

1. 推荐:使用subprocess.run()(Python 3.5+)

这是Python 3.5及以上版本最推荐的方式,功能全面且灵活,能同时捕获标准输出、标准错误和退出码:

import subprocess

# 执行命令并捕获输出
cmd_result = subprocess.run(
    ['ls', '-l'],  # 命令以列表形式传入(避免shell注入风险)
    capture_output=True,  # 捕获stdout和stderr
    text=True,  # 将字节流转为字符串(等价于 encoding='utf-8')
    check=False  # 设置为True会在命令执行失败时抛出异常,False则自行判断
)

# 获取输出内容
stdout_content = cmd_result.stdout  # 命令的正常输出
stderr_content = cmd_result.stderr  # 命令的错误输出
return_code = cmd_result.returncode  # 命令的退出码

# 示例打印
print("命令正常输出:")
print(stdout_content)
if return_code != 0:
    print("\n命令执行出错,错误信息:")
    print(stderr_content)

如果需要直接调用shell语法(比如管道、通配符),可以加上shell=True参数,但要注意shell注入风险,仅在命令内容完全可信时使用:

# 使用shell语法执行(比如管道)
result = subprocess.run('ls -l | grep ".py"', shell=True, capture_output=True, text=True)
print(result.stdout)

2. 简化版:subprocess.check_output()

如果你只关心命令的正常输出,且希望命令执行失败时直接抛出异常,可以用这个简化函数:

import subprocess

try:
    # 执行成功返回输出字符串,失败则抛出CalledProcessError
    output = subprocess.check_output(['ls', '-l'], text=True)
    print(output)
except subprocess.CalledProcessError as e:
    print(f"命令执行失败,错误码:{e.returncode},错误信息:{e.stderr.decode('utf-8')}")

为什么不用os.system?

os.system本质是调用系统的shell执行命令,但它只返回退出码,无法捕获输出——输出会直接打印到终端,没法存到变量里做后续解析。而subprocess模块提供了更细粒度的控制,包括输出捕获、错误处理、环境变量设置等,是Python官方推荐的系统命令交互工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:34:14