gpt4 book ai didi

python - 在不丢失格式的情况下打印 "time"shell 命令的输出

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:18 24 4
gpt4 key购买 nike

出于某种原因,当我从终端运行“time ./”时,我得到以下格式:

real	0m0.090suser	0m0.086ssys	0m0.004s

But when I execute the same command in Python 2.7.6:

result = subprocess.Popen("time ./<binary>", shell = True, stdout = subprocess.PIPE)

...我在 print(result.stderr) 时得到这种格式:

0.09user 0.00system 0:00.09elapsed

有什么方法可以强制使用first(real, user, sys)格式吗?

最佳答案

来自 man time 文档:

After the utility finishes, time writes the total time elapsed, the time consumed by system overhead, and the time used to execute utility to the standard error stream.

大胆强调我的。您捕获的是 stdout 流,而不是 stderr 流,因此您看到 的任何输出都必须是其他东西破坏您的 Python stderr 流的结果.

捕获标准错误:

proc = subprocess.Popen("time ./<binary>", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = proc.communicate()

stderr 变量然后保存 time 命令输出。

如果这继续产生相同的输出,您的 /bin/bash 实现有一个内置的 time 命令覆盖了 /usr/bin/time 版本(可能会在一行中输出所有内容)。您可以通过告诉 Python 运行 bash 内置命令来强制使用它:

proc = subprocess.Popen("time ./<binary>", shell=True, executable='/bin/bash',
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = proc.communicate()

关于python - 在不丢失格式的情况下打印 "time"shell 命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com