Php 使用exec()调用python脚本时出错
我试图调用一个简单的python脚本Php 使用exec()调用python脚本时出错,php,python,exec,Php,Python,Exec,我试图调用一个简单的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的权
#!/usr/local/python25/bin/python
print "hello world"
从下面的php脚本
<?php
echo exec("/usr/local/python25/bin/python myfile.py");
?>
但什么也没发生。
请告诉我这里怎么了?(我还检查了其他线程,但无法解决问题)
问题已解决:
我忘了授予访问/usr/local/python25/bin/python的权限。我这样做之后,问题就解决了。
非常感谢你的帮助 如果要捕获子流程的stdout,应该使用
如果直接调用python解释器,则不需要python脚本的第一行。1.
exec
函数只返回命令结果的最后一行。2.python中的print语句(python 3除外)会自动在末尾添加一个换行符 这就是你觉得什么都没发生的原因 通过这种方式,您可以捕获整个输出
exec("/usr/local/python25/bin/python myfile.py 2>&1", $output);
print_r($output);
这里有一点很明显,但是您能从终端运行python脚本吗?它真的运行吗 确保PHP作为-
chmod 777 myfile.py运行的任何用户都可以执行脚本,并且为了安全起见chmod 777/usr/local/python25/bin/python
。另外,确保python脚本与PHP脚本位于同一目录中,这是调用它的方法所需要的
尝试将您的PHP脚本更改为此,并告诉我您看到了什么:(已编辑)
谢谢您的回答,但我只想在我的浏览器上看到“hello world”。我想应该有用,但是……是的。print
将输出发送到进程的标准输出流。这可能会成为PHP进程的标准输出,可能会出现在Apache日志中。如果要发送该流并将其发送到浏览器,则需要捕获该流。您应该了解python打印和php echo是非常不同的。PHP将“echo”输出发送到HTTP流。Python将它发送到StdOut.@ Joe So,当你在CLI?@乔中使用<代码> Engule<代码>:对不起,但我试图从Exchange(…)改为PASTURU(…),但仍然不起作用。@ XDAZZ-我写PHP已经有一段时间了,但考虑到这一点:当你从命令行运行PHP时,你正在运行一个进程,而ECHO确实去了STDUT。但在服务器上运行时,输出必须转到相应的HTTP请求/响应。我不想费心去研究它,但我认为PHP进程可能是线程化的,每个进程提供几个并发请求。他们不能共享同一个标准!所以echo/STDOUT可能是CLI的一个特例。我在浏览器上看到的内容与此完全相同->“Array()”。感谢您回答我的问题。但我的浏览器上还是没有显示任何内容。这意味着没有错误,但是没有执行exec命令。那么您得到了什么?空白页或数组()
?另外,尝试添加行ini\u集('display\u errors',1);错误报告(-1)代码>到脚本顶部…您确定文件已运行吗?也许可以尝试从python脚本创建一个日志文件,也会在php脚本运行的当前路径上搜索myfile.py,您确定该文件在该路径上吗。最后,您不应该向执行它的shell返回错误值,php将忽略结果,因为语句失败(尝试在python文件中返回1)Add$output和$status
$output将包含python脚本生成的任何内容$status将包含任何错误代码(0表示无错误)
<?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);
?>