为什么subprocess.run()无法显示完整结果?

时间:2019-02-10 11:19:36

标签: python subprocess

在bash中执行time命令时(Ubuntu 18.04,python 3.6):

$ /usr/bin/time -f '%E' sleep 1
0:01.00

它按预期返回测量时间。但是使用subprocess.run()对于同一命令返回空:

>>> subprocess.run("/usr/bin/time -f '%E' sleep 1", stdout=subprocess.PIPE, shell = True)
0:01.00
CompletedProcess(args="/usr/bin/time -f '%E' sleep 1", returncode=0, stdout=b'')

我对函数的参数不是很熟悉,我的问题是:

为什么subprocess.run()的退货为空?

在这里使用subprocess.run()的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

time将结果打印为标准错误,而不是标准输出。

您也不需要或不需要此处的外壳。

r = subprocess.run(["/usr/bin/time", "-f", "%E", "sleep", "1"],
    stdout=subprocess.PIPE, stderr=subprocess.PIPE,
    # We expect textual output
    universal_newlines=True,
    # Properly raise an error on failure
    check=True)
print(r.stderr)

不过,也许您应该改用Python的计时工具。