我正在尝试实现一个Python脚本,该脚本将修改环境,然后在新环境下执行一个命令。首先,我一直在尝试利用os.execvpe
,如下面的示例(envtest.py
):
import os
import sys
def main():
env = dict(os.environ)
env["FOO"] = "BAR"
os.execvpe(sys.argv[1], sys.argv[1:], env=env)
if __name__ == "__main__":
main()
这在Linux上似乎工作得很好。例如,如果我调用脚本python envtest.py bash
,我会得到一个新的bashshell和我的额外环境变量集。如果我查看流程树,我的新环境是前一个shell的子环境,当我退出时,控制返回到前一个shell。这就是我想要的行为
在Windows上,我看到了一些不同的东西,如果我执行python envtest.py cmd
,我会看到类似的行为。“我的环境”集生成了一个新的命令提示符,但似乎控件也返回到了父命令提示符。这两个命令提示最终都处于活动状态,并且它们似乎彼此交替(至少我观察到的是这种行为)。下面是一个互动示例,它引导我得出这个结论:
C:\Temp>python envtest.py cmd
C:\Temp>Microsoft Windows [Version 10.0.17763.1217]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Temp>echo %FOO%
%FOO%
C:\Temp>echo %FOO%
BAR
C:\Temp>echo %FOO%
%FOO%
C:\Temp>echo %FOO%
BAR
有没有一种方法可以让python脚本用另一个进程替换自己,而不将控制权返回到Windows上的父进程?另一种方法是python脚本生成子进程并退出,其中子进程是python脚本父进程的子进程,即生成的进程树如下所示:
cmd.exe
\_ cmd.exe
而不是:
cmd.exe
\_ python.exe
\_ cmd.exe
目前没有回答
相关问题 更多 >
编程相关推荐