我有一组必须动态修改 os.sys.path 的脚本。然后脚本启动一个子进程。理想情况下,子进程应与调用者具有相同的 os.sys.path。我想避免将其作为参数传递,因为这需要修改子进程脚本。
我有可以运行并满足我所有需求的代码。我想知道是否有更好的方法来做到这一点,以及这种方法是否有任何陷阱。
主要流程
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.py 的 os.sys.path 上
EDIT将 os.sys 更改为 sys
PYTHONPATH 环境变量只是附加到sys.path
。 Python 本身(以及site
module) 从各种来源初始化模块搜索路径。您只需通过 PYTHONPATH 环境变量添加一个目录。更好的方法是将其安装在已搜索到的常用站点包目录中。那么你就不需要在环境中做任何特殊的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)