我希望
subprocess比慢
command。无意暗示这是脚本运行缓慢的 唯一
原因,您应该查看
commands源代码。少于100行,并且大部分工作委托给的函数
os,其中许多直接取自c
posix库(至少在posix系统中)。请注意,此
commands操作仅适用于Unix,因此无需做任何额外的工作即可确保跨平台兼容性。
现在看看
subprocess。有1500多行代码(全部为纯Python)执行各种检查以确保一致的跨平台行为。基于此,我希望
subprocess运行速度比慢
commands。
我对这两个模块进行了计时,并且在相当基本的基础上,
subprocess速度几乎是的两倍
commands。
>>> %timeit commands.getoutput('echo "foo" | cat')100 loops, best of 3: 3.02 ms per loop>>> %timeit subprocess.check_output('echo "foo" | cat', shell=True)100 loops, best of 3: 5.76 ms per loopSwiss提出了一些不错的改进,这些将有助于提高脚本的性能。但是,即使在应用它们之后,请注意,
subprocess它
仍然 较慢。
>>> %timeit commands.getoutput('echo "foo" | cat')100 loops, best of 3: 2.97 ms per loop>>> %timeit Popen('cat', stdin=PIPE, stdout=PIPE).communicate('foo')[0]100 loops, best of 3: 4.15 ms per loop假设您连续多次执行上述命令,这将加起来,并至少解决了部分性能差异。
无论如何,我将您的问题解释为与
subprocess和的相对性能有关
command,而不是有关如何加快脚本的速度。对于后一个问题,瑞士人的答案更好。



