python + django:无法找到带Popen的模块
我在我的一个视图中使用了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
。现在看起来在使用Popen
的时候,ss
这个模块本身并不在sys.path
中……
我这里做错了什么吗?
2 个回答
0
你还需要把
/home/socialsense/ss加到 Python 的路径里。
5
这个路径只会在当前的Python实例中有效。如果你想在另一个实例中使用它,可以通过给Popen
传递env
参数,并使用os.pathsep
来实现:
import subprocess
import os
import sys
subprocess.Popen(["python",path], env = {'PYTHONPATH': os.pathsep.join(sys.path)})
你真的应该看看multiprocessing
模块,它可以帮助你同时运行多个Python实例。
补充说明:@Graham在评论中提到,你可能想用一个不同版本的Python来运行这个外部脚本,而不是你当前使用的版本。虽然我觉得这种情况不太可能,但如果真是这样,你需要大部分PYTHONPATH
都不同才能正常工作,所以你需要添加/home/socialsense/ss/src
。