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

2 投票
3 回答
8406 浏览
提问于 2025-04-17 04:18
 <?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);

撰写回答