我有一个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也没有区别!
知道如何解决这个问题吗?!
答案 0 :(得分:0)
知道子进程继承了所有父进程环境,它们应该在相同的环境下运行,使得shell脚本不能设置任何环境,修复它。
这解决了保留的环境问题,但现在问题是,这个过程只是挂起了! (当它直接从shell运行时不会发生)