我在其中一个视图中使用了subprocess.Popen:
path = os.path.join(os.path.dirname(__file__), 'foo/bar.py')
subprocess.Popen(["python",path])
在我的wsgi文件中,我有
import os
import sys
ppath = '/home/socialsense/ss/src'
if ppath not in sys.path:
sys.path.append(ppath)
os.environ['DJANGO_SETTINGS_MODULE'] = 'ss.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
并在src
下我有ss
,我的django项目。
但是当我检查我的日志文件时,bar.py遇到错误ImportError: No module named ss.discovery.models
。现在,使用ss
时,模块sys.path
本身似乎不在Popen
...
我在这里做错了什么?
答案 0 :(得分:5)
对于当前的Python实例,它只会在sys.path
中。要将其用于另一个,请使用env
与Popen
os.pathsep
的{{1}}参数:
import subprocess
import os
import sys
subprocess.Popen(["python",path], env = {'PYTHONPATH': os.pathsep.join(sys.path)})
你应该真正研究multiprocessing
module来运行多个Python实例。
编辑:@Graham在评论中指出,您可能希望使用与您调用它不同的Python版本来运行此外部脚本。这对我来说听起来不太可能,但如果是这样,那么您需要使大部分PYTHONPATH
与其不同才能正常工作,因此您只需要添加/home/socialsense/ss/src
。
答案 1 :(得分:0)
您还需要将
/home/socialsense/ss添加到python路径。