【发布时间】:2012-09-17 12:54:39
【问题描述】:
我有一组脚本必须即时修改 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
【问题讨论】:
-
你可以在你的系统pythonpath环境变量中设置它吗?
-
您是指在运行中还是永久在机器上?
-
如果你知道运行时的路径,并且你没有同时运行多个 python 模块,那么在机器上永久设置它可能会简单得多(如果你不这样做,然后再改回来不希望它保持这种状态)
-
您应该指的是
sys.path,而不是os.sys.path(导入系统)。那是规范模块。通过另一个模块导入间接访问不是一个好的设计实践。
标签: python subprocess pythonpath