使用exec()调用python脚本时出错
<?php
echo exec("/usr/local/python25/bin/python myfile.py");
?>
我正在尝试从以下的 PHP 脚本中调用一个简单的 Python 脚本
#!/usr/local/python25/bin/python
print "hello world"
但是没有任何反应。请告诉我这里有什么问题?(我也查看了其他帖子,但还是没能解决我的问题)
问题解决了:我忘记给 /usr/local/python25/bin/python 这个路径设置访问权限。解决这个问题后,一切正常了。非常感谢你的帮助!
3 个回答
0
如果你想获取子进程的标准输出,也就是它打印出来的信息,你应该使用 passthru 这个函数。
另外,如果你是直接调用Python解释器的话,那个Python脚本的第一行可以不用写。
1
这里有个很明显的点,你能在终端里运行这个Python脚本吗?它真的能运行吗?
确保这个脚本可以被PHP运行的用户执行 - 你可以用命令 chmod 777 myfile.py
来设置权限,另外为了保险起见,也可以用 chmod 777 /usr/local/python25/bin/python
来设置Python的权限。同时,确保你的Python脚本和PHP脚本在同一个文件夹里,因为你调用它的方式需要这样。
试着把你的PHP脚本改成这样,然后告诉我你看到了什么:(已编辑)
<?php
// Path to the python script - either FULL path or relative to PHP script
$pythonScript = 'myfile.py';
// Path to python executable - either FULL path or relative to PHP script
$pythonExec = '/usr/local/python25/bin/python';
// Check the file exists and PHP has permission to execute it
clearstatcache();
if (!file_exists($pythonExec)) {
exit("The python executable '$pythonExec' does not exist!");
}
if (!is_executable($pythonExec)) {
exit(("The python executable '$pythonExec' is not executable!"));
}
if (!file_exists($pythonScript)) {
exit("The python script file '$pythonScript' does not exist!");
}
// Execute it, and redirect STDERR to STDOUT so we can see error messages as well
exec("$pythonExec \"$pythonScript\" 2>&1", $output);
// Show the output of the script
print_r($output);
?>
3
1. exec
这个函数只会返回命令结果的最后一行。
2. 在Python中,打印语句(除了Python 3)会自动在最后加一个换行符。
这就是你觉得没有发生什么的原因。
你可以通过这种方式获取完整的输出。
exec("/usr/local/python25/bin/python myfile.py 2>&1", $output);
print_r($output);