通过子进程或另一种方法调用Python速度命令行

时间:2013-09-30 19:25:02

标签: python shell terminal subprocess

使用subprocess.call方法在Python中有更高效或更快的效果吗?我注意到一年前有一个SO问题(Python subprocess module much slower than commands (deprecated)),除非由于Python删除了替代方案而导致折旧,所以我希望看看这是否是现在唯一一个调用命令的最快方法从Python内部到shell。具体来说,我正在运行以下命令:

  

subprocess.call( “foo” 的,壳=真)

或者我应该使用os吗?

感谢。

2 个答案:

答案 0 :(得分:6)

可能不是。您可能能够稍微加快调用速度,但根据我的经验,最大的好处是只启动子进程一次然后保持活动状态。

创建新进程是一项非常昂贵的操作,Python无法真正降低成本。

因此,不是调用/bin/ls path... 100次,而是创建一个外部进程,从stdin读取路径并返回所需的输出而不退出。

作为一个(悲伤的)例子: 1997年,我通过编写一个保持VM活动的包装器使Java 1编译器快1000倍,并在通过套接字接收选项后开始编译。这主要不是因为进程创建时间,而且因为在那时和之前启动Java VM需要很长时间。

答案 1 :(得分:1)

尝试使用subprocess.Popen()。它有许多优点。详情请参阅

Difference between subprocess.Popen and os.system

http://docs.python.org/2/library/subprocess.html