使用subprocess.call
方法在Python中有更高效或更快的效果吗?我注意到一年前有一个SO问题(Python subprocess module much slower than commands (deprecated)),除非由于Python删除了替代方案而导致折旧,所以我希望看看这是否是现在唯一一个调用命令的最快方法从Python内部到shell。具体来说,我正在运行以下命令:
subprocess.call( “foo” 的,壳=真)
或者我应该使用os
吗?
感谢。
答案 0 :(得分:6)
可能不是。您可能能够稍微加快调用速度,但根据我的经验,最大的好处是只启动子进程一次然后保持活动状态。
创建新进程是一项非常昂贵的操作,Python无法真正降低成本。
因此,不是调用/bin/ls path...
100次,而是创建一个外部进程,从stdin读取路径并返回所需的输出而不退出。
作为一个(悲伤的)例子: 1997年,我通过编写一个保持VM活动的包装器使Java 1编译器快1000倍,并在通过套接字接收选项后开始编译。这主要不是因为进程创建时间,而且因为在那时和之前启动Java VM需要很长时间。
答案 1 :(得分:1)
尝试使用subprocess.Popen()。它有许多优点。详情请参阅