使用exec()调用python脚本时出错

时间:2011-10-14 09:13:25

标签: 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的权限。在我这样做之后,问题解决了。 非常感谢你的帮助!

3 个答案:

答案 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脚本的第一行。