gpt4 book ai didi

python - 如何在 Python 中实现 Perl 的 exec 功能?

转载 作者:行者123 更新时间:2023-11-28 21:37:10 25 4
gpt4 key购买 nike

假设使用 Linux:

在 Perl 中,exec function执行外部程序并立即退出,将外部程序留在同一个 shell session 中。

使用 Python 的一个非常接近的答案是 https://stackoverflow.com/a/13256908

但是,使用 start_new_session=True 的 Python 解决方案使用 setsid 方法启动外部程序,这意味着该解决方案适合制作守护程序,而不是交互式程序。

下面是一个使用 perl 的简单例子:

perl -e '$para=qq(-X --cmd ":vsp");exec "vim $para"'

vim启动后,原来的Perl程序已经退出,vim还在同一个shell session 中(vim没有发送到新的 session 组)。

如何使用 Python 获得相同的解决方案。

最佳答案

Perl 只是包装了 exec* system call functions这里。 Python 具有相同的包装器,在 os 模块中,参见 os.exec* documentation :

These functions all execute a new program, replacing the current process; they do not return. On Unix, the new executable is loaded into the current process, and will have the same process id as the caller.

在 Python 中做同样的事情:

python -c 'import os; para="-X --cmd \":vsp\"".split(); os.execlp("vim", *para)'

os.execlp 接受参数列表并从第一个参数开始在 $PATH 中查找二进制文件。

subprocess 模块只适用于运行Python 进程next 的进程,而不是替换Python 进程。在 POSIX 系统上,subprocess 模块使用低级 exec* 函数来实现它的功能,然后是 Python 进程的 fork替换为你想用 subprocess 运行的命令。

关于python - 如何在 Python 中实现 Perl 的 exec 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50129907/

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