我有一堆 python 脚本。其中一个安装需要将其路径添加到 $PATH 的软件(颠覆)。安装后,我希望下一个脚本使用该软件。如果我export PATH=/opt/subversion/bin:$PATH
在第一个和第二个脚本之间运行 bash,一切都很好。但是,如果我添加os.system( 'export PATH=/opt/subversion/bin:$PATH' )
为第一个脚本(安装颠覆)的最后一个命令,$PATH
它退出后保持不变。
是否可以从 python 脚本中更改 $PATH 以便在脚本完成后保持更改(当然,在单个 bash 会话中,我知道/etc/profile
)。
一般来说,这是不可能的。一个进程不能改变另一个进程的环境。
父进程可以预设它产生的子进程的环境,但实际上没有任何方法可以让一个进程影响另一个进程的环境,除非这些应用程序专门设计为允许这样做。
os.system()
产生一个子外壳。所以它不知道您现有的外壳。您当然可以在运行命令时设置路径(不导出)。IE:
哦,os.system() 正在贬值。你应该切换到
subprocess.Popen()
.正如其他人指出的那样,实际上没有任何方法可以修改父进程的环境。它需要在父进程的内存中摆弄,据我所知,没有明确定义的方法(即你可能会崩溃你的 shell)。
如果您之后运行的脚本/程序是 python,您可以作为您在这些程序中做的第一件事,将颠覆路径添加到它们的环境中。
或者,如果您总是使用相同的参数以相同的顺序运行相同的脚本,请将它们包装在一个 shell 脚本中,该脚本为自己设置环境并运行这些程序/脚本。
还有另一种解决方法,作为您在安装 subversion 的脚本中做的最后一件事,您可以用另一个具有您想要的环境的 shell 替换该进程。您将在 bash 中运行 bash,但是,它可以作为一个很好的解决方法。