在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()
的正确方法是什么?
答案 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的计时工具。