【问题标题】:Execution of a Python Script from PHP从 PHP 执行 Python 脚本
【发布时间】:2016-08-10 09:34:07
【问题描述】:

我正在制作一个 android 应用程序,我首先将图像上传到服务器,在服务器端,我想从 PHP 执行 Python 脚本。但我没有得到任何输出。当我从命令提示符访问 Python 脚本并运行 python TestCode.py 时,它会成功运行并提供所需的输出。我正在使用以下命令从 PHP 运行 Python 脚本:

$result = exec('/usr/bin/python /var/www/html/Source/TestCode.py');

echo $result

但是,如果我从 PHP 运行一个简单的 Python 程序,它就可以工作。

PHP 具有访问和执行文件的权限。

这里有什么我遗漏的吗?

【问题讨论】:

  • exec 不会自行打印,它会返回最后一行输出,或者将所有输出行放入第二个参数(如果提供),因为手册页会告诉你;o/
  • 我修改了它,但问题仍然存在。有什么建议吗??
  • 你知道stderr和stdout的区别吗?因为 exec - 据我所知 - 只处理标准输出。如果你的 testcode.py 只产生 stderr 输出,你什么也看不到。

标签: php android python linux exec


【解决方案1】:
exec('/usr/bin/python /var/www/html/Source/TestCode.py', $output);

var_dump($output);

exec 的第二个参数将给出输出

编辑:

exec('/usr/bin/python /var/www/html/Source/TestCode.py 2>&1', $output);

2>&1 - 将stderr 重定向到stdout。现在如果出现任何错误,$output 将被填充。

【讨论】:

  • 我收到了输出array(0) {},这意味着我的数组是空的,但是当我运行 python 脚本时它会给我输出。
【解决方案2】:
  1. 首先使用“which python”命令检查你的python PATH,检查结果是/usr/bin/python。

  2. 如果您编写了 #!/usr/bin/sh,请检查您的“TestCode.py”,而不是将其替换为 #!/usr/bin/bash。

  3. 比运行这些命令 exec('/usr/bin/python /var/www/html/Source/TestCode.py', $result); 回显 $result

【讨论】:

  • 我没有得到任何输出。
  • 好的,只需发送您的 TestCode.py 文件,让我尽力而为。