7

我有一组必须即时修改 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 上

编辑 将 os.sys 更改为 sys

4

1 回答 1

-3

PYTHONPATH 环境变量只是附加到sys.path. Python 本身(和site模块)从各种来源初始化模块搜索路径。您只需要通过 PYTHONPATH 环境变量添加您的一个目录。更好的办法是把它安装在已经搜索过的通常的站点包目录中。这样你就不必在环境中做任何特别的事情了。

于 2012-09-25T23:46:38.357 回答