我觀察到一個C++編譯的二進制文件的不同輸出,它調用一些OpenCV庫,通過經由管理啓動的python解釋器.py($ python2.7 manage.py shell)與標準的python解釋器($ python2.7)。從bash shell獲得的輸出與標準python解釋器的輸出相當。二進制文件在通過manage.py啓動的python解釋器中執行時提供了不同的輸出,與標準的python解釋器相比
看起來,與標準python shell相比,通過manage.py啓動的python解釋器的'environment'有些不同。我想知道如何確定兩個解釋器之間的差異,並最終如何讓二進制執行的結果相同。
設置細節:
- 通過ssh連接到Web服務器(膩子)
- Centos6-64bit
- /斌/慶典
從我的Django項目目錄中我運行以下和處理後的圖像(執行二進制文件的結果)如我所料:
$ python2.7
Python 2.7.1 (r271:86832, Sep 13 2011, 19:13:17)
[GCC 4.4.4 20100726 (Red Hat 4.4.4-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> import os
>>> subprocess.call(['/home/username/engine/binary','/home/username/imagetmp/image.jpg'])
0
>>>
從我的Django項目目錄中我運行以下命令,處理後的圖像是不是如我所料:
$ python2.7 manage.py shell
Python 2.7.1 (r271:86832, Sep 13 2011, 19:13:17)
[GCC 4.4.4 20100726 (Red Hat 4.4.4-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import subprocess
>>> import os
>>> subprocess.call(['/home/username/engine/binary','/home/username/imagetmp/image.jpg'])
0
>>>
在命令行我運行以下命令,處理後的圖像是如我所料。
$ pwd
/home/username/engine/
$ ./binary /home/username/imagetmp/image.jpg
$
兩個Python解釋在我已經比較如下:
- sys.path中(從通過manage.py推出了Python解釋器得到的結果有路徑,而結果我的Django項目從標準python解釋器不)
- os.environ(從通過manage.py啓動的python解釋器獲得的結果包括DJANGO_SETTINGS_MODULE和CELERY_LOADER環境變量,而來自標準python解釋器的結果不)
- os.stat用於在/ home /用戶名/發動機和/ home /用戶名/發動機/庫..沒有差異觀察
我也嘗試修改子調用,它並沒有影響每一個文件:
subprocess.call([ '/家/用戶名/發動機/二進制', '/家庭/用戶名/ imagetmp/image.jpg的'],ENV = os.environ)
所以I」的差異已經注意到的是:
- (InteractiveConsole)li ne當python解釋器shell通過$ python2.7 manage.py shell啓動時,我不確定這個額外的行意味着什麼,或者更確切地說它是否存在以及存在意味着什麼,以及它是否是我在行爲中觀察到的差異的原因。
- sys.path和os的結果略有不同。環境
我的結論是,有一些基本的東西我不知道有關通過manage.py啓動的python解釋器與標準python解釋器之間的區別。任何想法如何調試這種情況將不勝感激。
你試過'sys.modules'嗎? – 2012-01-07 20:45:59
'os.fork()'是否工作? – eduffy 2012-01-07 20:51:12
@ IgnacioVazquez-Abrams來自python解釋器,通過manage.py:len(sys.modules.keys())= 680啓動;從標準的Python解釋器:len(sys.modules.keys())= 42;巨大差距! – sgallen 2012-01-08 01:32:46