Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用exec()调用python脚本时出错_Php_Python_Exec - Fatal编程技术网

Php 使用exec()调用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的权

我试图调用一个简单的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);

?>