我有一组脚本需要随时修改os.sys.path。脚本然后启动一个子进程。理想情况下,子进程与调用者具有相同的os.sys.path。我想避免将它作为参数传递,因为这需要修改子流程脚本。有没有更好的方法来控制子进程的PYTHONPATH?
我有代码可以工作并满足我所有的需求。我想知道是否有更好的方法来做到这一点,以及这种方法是否存在缺陷。
主要工艺
import os
import sys
import subprocess
#append a dir thats not on the sys path
sys.path.append('C:/pytest2/')
#convert the sys.path into env variable format
pypath = ''
for d in sys.path:
pypath = pypath + d + ';'
#create a temp copy of the env variables
myenv = os.environ.copy()
#set PYTHONPATH to match this scripts sys.path
myenv['PYTHONPATH'] = pypath
#setup a python command to echo the sys.path
command = 'python C:/pytest/test_subprocess.py'
#launch the subprocess with the custom env
p = subprocess.Popen(command, env=myenv)
C:/pytest/test_subprocess.py
import sys
print 'sys path'
print sys.path
在这个控制台输出
运行的主要过程的结果,你可以请参阅C:/ pytest2 /位于test.subprocess的os.sys.path中。 PY
编辑改变os.sys到SYS
你可以在你的系统pythonpath环境变量中设置它吗? – BostonJohn
你的意思是在机器上或永久在机器上? – Miebster
如果你知道运行时的路径,并且你并没有同时运行多个python模块,那么只需在机器上永久地设置它就可以简单得多(如果你不想让它停留在那个地方,方式) – BostonJohn