【问题标题】:Unable to run python From PHP无法从 PHP 运行 python
【发布时间】:2015-05-31 17:54:37
【问题描述】:

我想运行一些python脚本(我知道风险,但我必须完成它)

我尝试使用:

echo exec('python --version ');

还有 回声shell_exec('python --version ');

还尝试了'/usr/bin/python ' 而不仅仅是 python 但我根本没有得到任何输出。 我什至已将 www-data 添加到 sudoers 列表中,但仍然无法正常工作。

我该怎么办?

运行 debian 和 python 2.7

【问题讨论】:

  • 而不是python 指定路径,如/usr/local/bin/python
  • 您可以通过运行 which python 来检查 Python 的确切安装位置,然后在您的代码中使用此路径。
  • 不行,没用。还有什么想法吗?给我任何可能是问题的东西
  • 试过哪个python,给/usr/bin/python。我已经尝试从该路径运行它
  • 似乎涉及一些安全措施,例如安全模式 php.net/manual/en/features.safe-mode.php 或类似 suhoshin 或 apparmor 的东西

标签: php python linux shell


【解决方案1】:

当您在命令行中键入python 时,您的Shell 将搜索在环境变量$PATH 中配置的所有文件夹。您的 PHP 解释器具有不同的环境,因此可能找不到 python-Binary。

尝试通过在您的 Shell 中运行 which python 来获取您的 python-Binary 的完整路径,并尝试在 PHP 中使用它。

【讨论】:

  • 我试过了,正如评论中已经提到的那样。还有其他想法吗?
【解决方案2】:

似乎python --version 出于某种原因将版本信息打印到 stderr 而不是 stdout,因此您需要将前者重定向到后者:

exec('python --version 2>&1');

另外,请注意 exec 的返回值只是执行命令输出的最后一行。如果您想从返回多行的命令中获取完整输出,则需要提供一个数组作为 exec's 第二个参数:

$output = array();
exec($some_command, $output);

【讨论】:

  • 你能写一个例子吗?
【解决方案3】:

要捕获python --version 的输出,请使用以下命令:

exec('python --version 2>&1', $output);
var_dump($output);

python --version 输出到 stderr,即bug。它已在 Python 3.4.0 中修复(请参阅 changelog, issue #18338)。

【讨论】:

    【解决方案4】:

    你不能从PHP运行python脚本的原因是,系统调用需要root。即使你进行sudo调用,它也需要密码。所以你可以做的就是将这一行添加到末尾文件:/etc/sudoers

    www-data ALL=(ALL) NOPASSWD:ALL

    这样,来自 PHP 的任何 sudo 调用都不需要密码。 继续执行 python 脚本,例如。 exec("sudo python /home/pi/test.py"); 这对我有用。让我知道它是否有效。

    【讨论】:

      猜你喜欢
      • 2017-05-22
      • 1970-01-01
      • 2019-07-10
      • 2017-12-06
      • 2016-04-21
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多