Difference between calling a python script by terminal and by PHP? Where is the Error?
I have a PHP script, that calls a python script by
$call_python = "python ../python/lp_3.py ".$author;
$python_output = Null;
$mystring = exec($call_python, $output_python);
This produces me an error in the log:
$ 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
If I do python python/lp_3.py
in the terminal everything is fine. What do I miss?
Edit:
After the suggestion of @S.Lott I had a look at the variables PA开发者_运维知识库TH
and PYTHONPATH
both in the terminal and in PHP.
In the terminal:
$ 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
As you can see, PYTHONPATH
is empty.
In PHP:
echo getenv("PYTHONPATH"); // NOTHING
echo getenv("PATH"); // /usr/bin:/bin:/usr/sbin:/sbin
Perhaps I should mention that the first two lines in my python script are
#!/usr/bin/env python
# encoding: utf-8
I am open for suggestions. =)
Edit2:
I checked every installed python version on my mac. I found out, that python2.7 has no MySQLdb installed. Is there a way to tell PHP not to use python2.7 and to use e.g. python2.6 instead? I tryed toying with setenv()
in PHP but I couldn't figure out how to use it properly, and I don't even know if this is the right approach.
In your PHP code, you're just calling "python", and letting PHP decide which version of Python to use. Use an explicit path to a specific Python binary, (e.g. /usr/bin/python2.6).
You need to know the exact path to the version of Python that has MySQLdb installed.
$call_python = "/opt/local/bin/python2.6 ../python/lp_3.py ".$author;
$python_output = Null;
$mystring = exec($call_python, $output_python);
did the job. Like @AJ pointed out, I had to tell python which version to chose. I chose a version where MySQLdb was available and all was fine.
精彩评论