我试图调用一个简单的python脚本
#!/usr/local/python25/bin/python
print "hello world"
来自以下php脚本
<?php
echo exec("/usr/local/python25/bin/python myfile.py");
?>
但什么都没发生。 请告诉我这里有什么问题? (我还检查了其他线程,但我无法解决我的问题)
解决问题: 我忘记了访问/ usr / local / python25 / bin / python的权限。在我这样做之后,问题解决了。 非常感谢你的帮助!
答案 0 :(得分:3)
1. exec
函数只返回命令结果的最后一行
2. python中的print语句(python 3除外)会在结尾处自动添加换行符。
这就是你觉得什么都没发生的原因。
你可以通过这种方式捕获整个输出。
exec("/usr/local/python25/bin/python myfile.py 2>&1", $output);
print_r($output);
答案 1 :(得分:1)
这里有一个明显的观点,但是你能从终端运行python脚本吗?它真的运行了吗?
确保脚本可由PHP运行的任何用户执行 - chmod 777 myfile.py
,并且只是为了安全chmod 777 /usr/local/python25/bin/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);
?>
答案 2 :(得分:0)
如果要捕获子进程'stdout,则应使用passthru
如果你直接调用python解释器,你也不需要那个python脚本的第一行。