その場で 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 に変更