PHP exec调用python无效

3 投票
4 回答
7758 浏览
提问于 2025-04-16 12:36

大家好。我在DreamHost的一个网络服务器上运行Python。我使用的是他们提供的Python版本,并且在这里使用一个叫做lastfm的模块:http://code.google.com/p/python-lastfm/

为了让它正确导入,我这样做:

import sys
sys.path.append("/home/myusername/build/Python-2.5/Lib/site-packages/")
import lastfm

因为lastfm模块就安装在那儿。

当我用putty通过SSH登录到我的服务器时,我可以直接运行python test.py,效果很好。但是当我通过一个PHP脚本运行它时:

exec("python test.py");

据说它不工作,脚本也没有运行。当我这样做的时候:

import lastfm

后面还有其他内容,但当我真的尝试用这个模块做点什么,比如:

import lastfm
api=lastfm.Api(api_key)

它就不运行了。再说一次,我可以在命令行中用同样的Python安装运行这个脚本,效果很好。所以当我从PHP脚本运行时,肯定是发生了什么问题。我以为它会运行完全相同的Python和所有内容。我查了其他帖子,他们说可能是文件权限的问题,但我把每个文件的权限都设置成777,还是不行。我不知道问题出在哪里。提前谢谢大家。

4 个回答

0

对于Windows用户:

$output = null;
exec('C:\\Python27\\python.exe C:\\sud.py', $output);
echo var_export($output, TRUE);

我整整一天都在找这个代码 ^^
所以我希望这能帮到某个人。

1

无论Python抛出什么错误,都会发送到子进程的错误输出(stderr)。你可以尝试让PHP读取这个错误输出,或者在Python中这样做:

import sys
sys.stderr = sys.stdout
1

试着使用Python程序的完整路径来运行它。例如:

exec("/usr/bin/python test.py")

你可以通过命令行找到这个完整路径,使用which命令就可以了:

$ which python

/usr/bin/python

撰写回答