2011-08-11 28 views
2

我使用subprocess.Popen中的我的意見之一:蟒蛇+ Django的:無法找到模塊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下我我的django項目有ss

但是當我檢查我的日誌文件時,bar.py遇到錯誤,ImportError: No module named ss.discovery.models。現在看來,模塊ss本身不在sys.path使用時Popen ...

什麼我做錯了嗎?

回答

5

它只會在sys.path當前的Python實例。爲了得到它的另一個使用env參數Popenos.pathsep

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

嚴格地說,不應該將整個sys.path添加到PYTHONPATH中,以防WSGI應用程序沒有使用默認的Python版本運行,而是使用另一個版本。 IE瀏覽器。 'python'是Python 2.6,但是mod_wsgi是爲Python 2.7編譯的。 –

0

您還需要將

 /home/socialsense/ss
添加到python路徑中。

+0

他爲什麼要那樣做? – agf

+0

對於他還沒有遇到的其他問題。 ;-) –