Разница между вызовом скрипта Python терминалом и PHP? Где ошибка? - PullRequest
4 голосов
/ 19 мая 2011

У меня есть сценарий PHP, который вызывает сценарий Python

$call_python = "python ../python/lp_3.py ".$author;
$python_output = Null;
$mystring = exec($call_python, $output_python);

. В журнале возникает ошибка:

$ vi logs/error_log shows
....
Traceback (most recent call last):
    File "../python/lp_3.py", line 14, in <module>
        import MySQLdb
ImportError: No module named MySQLdb

Если я выполняю python python/lp_3.py вТерминал все хорошо.Что мне не хватает?

Редактировать:

После предложения @ S.Lott я посмотрел на переменные PATH и PYTHONPATH как в терминале, так и в PHP.

В терминале:

$ echo $PYTHONPATH

$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/texbin:/usr/X11/bin

Как видите, PYTHONPATH пусто.

В PHP:

echo getenv("PYTHONPATH"); // NOTHING
echo getenv("PATH"); // /usr/bin:/bin:/usr/sbin:/sbin

Возможно, мне следуетОтметим, что первые две строки в моем скрипте Python:

#!/usr/bin/env python
# encoding: utf-8

Я открыт для предложений.=)

Edit2:

Я проверил каждую установленную версию Python на моем Mac.Я обнаружил, что в python2.7 не установлен MySQLdb.Есть ли способ сказать PHP не использовать python2.7 и использовать вместо этого, например, python2.6?Я пытался играть с setenv() в PHP, но я не мог понять, как правильно его использовать, и я даже не знаю, правильный ли это подход.

Ответы [ 2 ]

4 голосов
/ 19 мая 2011

В вашем PHP-коде вы просто вызываете "python" и позволяете PHP решать, какую версию Python использовать. Используйте явный путь к конкретному двоичному файлу Python (например, /usr/bin/python2.6).

Вам необходимо знать точный путь к версии Python, на которой установлен MySQLdb.

0 голосов
/ 19 мая 2011
$call_python = "/opt/local/bin/python2.6 ../python/lp_3.py ".$author;
$python_output = Null;
$mystring = exec($call_python, $output_python);

сделал работу.Как указал @AJ, я должен был сказать Python, какую версию выбрать.Я выбрал версию, где MySQLdb был доступен, и все было хорошо.

...