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

Boy*_*ing 2 python

假设使用Linux:

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

使用Python的一个非常接近的答案是/sf/answers/927983591/

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

这是一个使用perl的简单示例:

perl -e '$para=qq(-X --cmd ":vsp");exec "vim $para"'
Run Code Online (Sandbox Code Playgroud)

启动vim后,原始Perl程序已退出,vim仍在同一个shell会话中(vim不会发送到新的会话组).

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

Mar*_*ers 5

Perl只是在这里包装exec*系统调用函数.Python有相同的包装器,在os模块中,请参阅os.exec*文档:

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

要在Python中执行相同的操作:

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

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

subprocess模块仅适用于在Python 进程旁边运行进程,而不是替换Python进程.在POSIX系统上,subprocess模块使用低级exec*函数来实现它的功能,然后将Python进程的fork替换为您想要运行的命令subprocess.