子流程不保留所有环境变量

时间:2017-03-29 14:18:56

标签: python shell subprocess tcsh

我有一个tcsh shell脚本,它设置了所有必要的环境,包括PYTHONPATH,然后在它的末尾运行一个可执行文件。我还有一个python脚本作为输入发送到shell脚本。因此,当从终端运行时,以下工作完全正常:

path to shell script path to python script

现在,当我想从子流程做同样的事情时,会出现问题。 python脚本无法运行,因为它无法找到许多已经应该通过shell脚本设置的模块。很明显,与运行子进程的父环境或shell脚本本身相比,PYTHONPATH最终会丢失许多路径!看起来子进程不尊重shell脚本设置的环境。

我已经尝试了各种各样的东西,但没有人帮忙!

cmd = [shell_script_path, py_script_path] process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=os.environ.copy()) 如果没有给出env也没有区别!

知道如何解决这个问题吗?!

1 个答案:

答案 0 :(得分:0)

知道子进程继承了所有父进程环境,它们应该在相同的环境下运行,使得shell脚本不能设置任何环境,修复它。

这解决了保留的环境问题,但现在问题是,这个过程只是挂起了! (当它直接从shell运行时不会发生)