python + django:无法用Popen找到模块

goh*_*goh 3 python django subprocess mod-wsgi wsgi

我在其中一个视图中使用了subprocess.Popen:

path = os.path.join(os.path.dirname(__file__), 'foo/bar.py')
subprocess.Popen(["python",path])
Run Code Online (Sandbox Code Playgroud)

在我的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()
Run Code Online (Sandbox Code Playgroud)

而在src我有ss,我的Django项目.

但是当我检查我的日志文件时,bar.py遇到了错误,ImportError: No module named ss.discovery.models.现在似乎模块ss本身在sys.path使用时不在Popen......

我在这里做错了什么?

agf*_*agf 5

它只sys.path适用于当前的Python实例.为了得到它的另一个,使用env参数Popenos.pathsep:

import subprocess
import os
import sys
subprocess.Popen(["python",path], env = {'PYTHONPATH': os.pathsep.join(sys.path)})
Run Code Online (Sandbox Code Playgroud)

您应该真正研究运行多个Python实例的multiprocessing模块.

编辑:@Graham在评论中指出,您可能希望使用与您调用的Python不同版本的Python运行此外部脚本.这对我来说听起来不太可能,但如果是这样的话,你需要大部分PYTHONPATH时间来使它工作,所以你需要添加/home/socialsense/ss/src.