Python 通过子进程或其他方法加速命令行调用

标签 python shell terminal subprocess

在 Python 中有什么比使用 subprocess.call 方法更高效或更快的吗?我注意到一年前有一个关于这个的 SO 问题(Python subprocess module much slower than commands (deprecated)),只是由于 Python 删除了那个替代品它变得贬值了,所以我想看看这是否是现在唯一也是最快的调用命令的方法Python 中的 shell。具体来说,我正在运行以下命令:

subprocess.call("foo",shell=True)

或者我应该使用 os 吗?

谢谢。

最佳答案

可能不会。您可能可以稍微加快调用速度,但根据我的经验,最大的收获是只启动子进程一次,然后使其保持事件状态。

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

因此,与其调用 /bin/ls path... 100 次,不如创建一个从标准输入读取路径并在不退出的情况下返回所需输出的外部进程。

作为一个(悲伤的)例子:在 ca。 1997 年,我通过编写一个包装器使 Java 1 编译器的速度提高了 1000 倍,该包装器使 VM 保持事件状态,并在通过套接字接收到选项后才开始编译。这主要不是因为进程创建时间,而是因为在那个时候和以前启动 Java VM 需要很长时间。

关于Python 通过子进程或其他方法加速命令行调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19102166/

相关文章:

shell - 在 bash 中做什么! (感叹号)在命令之前是什么意思?

javascript - 如何使用 nodejs 在终端中呈现扩展的 ASCII 字符

python - 当越界索引在 np 数组中时,为什么 python numpy.delete 不会引发 indexError

python - 当我不需要 yield 返回值时,@defer.inlineCallbacks 是什么意思?

python - 收敛警告 : Maximum Likelihood slows kernel-run-time?

python - 赋值以覆盖 python 数组

bash 脚本没有正确给出 MariaDB 服务状态

python - Django , python : reload function in shell

显示 2 个用户的终端 MAC OSX 正常运行时间命令

c# - 更改 Visual Studio (Mac) 使用的默认终端