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

时间:2018-05-02 08:12:01

标签: python

假设使用Linux:

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

使用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会话中(vim不会发送到新的会话组)。

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

1 个答案:

答案 0 :(得分:5)

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

  

这些函数都执行一个新程序,取代当前进程;他们不回来。在Unix上,新的可执行文件被加载到当前进程中,并且将具有与调用者相同的进程ID。

在Python中做同样的事情:

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

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

subprocess模块仅适用于将进程接下来运行到Python进程,而不是替换Python进程。在POSIX系统上,subprocess模块使用低级exec*函数来实现它的功能,其中Python进程的 fork 随后被替换为命令您希望与subprocess一起运行。