Я наблюдаю другой вывод из скомпилированного двоичного файла C ++, который вызывает некоторые библиотеки OpenCV, выполняемые через интерпретатор python, запущенный через manage.py (оболочка $ python2.7 manage.py), по сравнению со стандартным интерпретатором python ($ python2+0,7).Вывод, полученный из оболочки bash, эквивалентен выводу стандартного интерпретатора python.
Похоже, что во «среде» интерпретатора python, запущенного через manage.py, что-то отличается от стандартной оболочки python.Я хотел бы знать, как определить разницу между двумя интерпретаторами и, в конечном счете, как сделать так, чтобы результат двоичного выполнения был одинаковым.
Подробности настройки:
- подключен квеб-сервер через ssh (putty)
- Centos6-64bit
- / bin / bash
В моем каталоге проекта 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 (результат, полученный от интерпретатора python, запущенного через manage.py, имеет путь к моему проекту django, а результат от стандартного интерпретатора python - нет)
- os.environ (результат, полученный из pytИнтерпретатор hon, запущенный через manage.py, содержит переменные окружения DJANGO_SETTINGS_MODULE и CELERY_LOADER, в то время как результат стандартного интерпретатора python - нет)
- os.stat для каждого файла в / home / username / engine и / home / username /engine / libs .. без каких-либо различий
Я также попытался изменить вызов подпроцесса, который не оказал никакого влияния:
subprocess.call (['/ home / username / engine/binary','/home/username/imagetmp/image.jpg '], env = os.environ)
Итак, я заметил следующие различия:
- строка (InteractiveConsole), когда оболочка интерпретатора python запускается через оболочку $ python2.7 manage.py. Я не уверен, что означает эта дополнительная строка, а точнее, подразумевает ли ее присутствие, и является ли она причинойразличий, которые я наблюдаю в поведении.
- небольшие различия в результатах sys.path и os.environ
Мой вывод заключается в том, что есть нечто фундаментальное, чего я не знаю оf относительно различий между интерпретатором python, запущенным через manage.py, и стандартным интерпретатором python.Будем весьма благодарны за любые мысли о том, как отладить эту ситуацию.