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

如何在Python中仅捕获/usr/bin/time输出,排除命令自身stderr?

当被执行的命令自身输出stderr时,如何仅捕获/usr/bin/time的输出?

当前使用的代码:

import subprocess
print(subprocess.run('/usr/bin/time -p foo', capture_output=True, shell=True).stderr.decode())

执行后输出:

foo_stderr
real 0.02
user 0.01
sys 0.00

已知以下两种方案不考虑:

  • 将输出写入文件(例如GNU time --output file)
  • 处理捕获的输出以筛选出相关数据

解决方案:重定向目标命令的stderr

通过在shell命令中将目标命令foo的stderr单独重定向,避免其污染/usr/bin/time的输出。具体用子shell包裹foo,并将其stderr重定向到/dev/null:

import subprocess
# 仅保留/usr/bin/time的stderr输出,丢弃foo的stderr
result = subprocess.run('/usr/bin/time -p sh -c "foo 2>/dev/null"', capture_output=True, shell=True)
print(result.stderr.decode())

执行后只会输出/usr/bin/time的计时内容:

real 0.02
user 0.01
sys 0.00

原理说明

/usr/bin/time会将计时结果写入自身的stderr,而目标命令foo的stderr默认会与前者的输出混合。通过sh -c "foo 2>/dev/null",我们直接丢弃foo的stderr输出,这样subprocess捕获到的stderr就只有/usr/bin/time的内容了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:42:08