gpt4 book ai didi

python - 在 python 中替代子进程

转载 作者:太空狗 更新时间:2023-10-30 01:00:45 25 4
gpt4 key购买 nike

我正在尝试编写一个脚本,它必须对一些 bash 命令进行大量调用,解析和处理输出,最后给出一些输出。

我正在使用 subprocess.Popen 和 subprocess.call

如果我理解正确,这些方法会产生一个 bah 进程,运行命令,获取输出,然后终止进程。

有没有办法让 bash 进程在后台持续运行,然后 python 调用可以直接转到该进程?这就像作为服务器运行的 bash 和 python 调用一样。

我觉得这会稍微优化调用,因为没有 bash 进程设置和拆卸。或者它不会带来任何性能优势?

最佳答案

I feel this would optimize the calls a bit as there is no bash process setup and teardown.

subprocess 永远不会运行 shell,除非你明确要求它,例如,

#!/usr/bin/env python
import subprocess

subprocess.check_call(['ls', '-l'])

此调用运行 ls 程序而不调用 /bin/sh

Or will it give no performance advantage?

如果您的子进程调用实际使用 shell,例如 specify a pipeline consicely或者你使用 bash process substitution直接使用 subprocess 模块定义可能会冗长且容易出错那么调用 bash 不太可能是性能瓶颈 - 测量它首先。

有些 Python 包也允许明确指定此类命令,例如 plumbum could be used to emulate a shell pipeline .

如果你想使用bash作为服务器进程那么pexpect对于与外部进程的基于对话的交互很有用——尽管它不太可能影响时间性能。 fabric允许运行本地和远程命令 (ssh)。

还有其他子流程包装器,例如 sarge它可以在不调用 shell 的情况下解析字符串中指定的管道,例如,它启用 cross-platform support for bash-like syntax (&&, ||, & in command lines)sh -- Unix 上的完整 subprocess 替代品,默认提供 TTY(它看起来功能齐全,但 the shell-like piping is less straightforward)。您甚至可以使用 Python-ish BASHwards-looking 语法来运行带有 xonsh 的命令。壳。同样,在大多数情况下,它不太可能以有意义的方式影响性能。

以可移植的方式启动和与外部进程通信的问题很复杂——进程、管道、ttys、信号、线程、异步之间的交互。 IO,各个地方的缓冲都有毛边。如果您不知道特定包如何解决与运行 shell 命令相关的众多问题,那么引入新包可能会使事情复杂化。

关于python - 在 python 中替代子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32754683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com