我有一組腳本需要隨時修改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