【问题标题】:Run compiled python script from PHP从 PHP 运行编译的 python 脚本
【发布时间】:2017-12-28 03:23:22
【问题描述】:

我需要运行一个 python 脚本,通过 PHP 生成的网页使用 pyinstaller 编译。 我尝试了 shell_exec()、exec() 和 system() 都没有成功。 我经常在后台从终端运行脚本:

temperature_sensor_code > /dev/null 2>&1

我已将 www-data 用户添加到 sudoers。我知道这不是一个好方法,但我需要它来发送 killall temperature_sensor_code 命令(这是有效的)。

这是我的情况:

<?php

  $run = escapeshellcmd('temperature_sensor_code > /dev/null 2>&1');
  shell_exec($run);

  header("Refresh: 0; URL=index.php");
 ?>

我在 /usr/bin 中创建了一个符号链接,也尝试使用脚本的完整路径,但没有成功。

更新:为了更简单,我创建了一个简单的 sh 脚本 run.sh 并放入 /var/www 并使其运行

shell_exec("/var/www/run.sh");

这对我有用。因此,我将脚本 temperature_sensor_code 放在 /var/www 中,但这不起作用。如果我添加var_dump(exec("/var/www/temperature_sensor_code/temperature_sensor_code")); 给我:string(0) ""

我认为编译后的python脚本有问题,因为PHP端似乎还可以。

【问题讨论】:

  • 错误?预期的结果是什么?
  • 没有从 PHP 报告的错误。 python 脚本本身工作正常;基本上它读取传感器并将数据存储在 MySQL 中。
  • 试过正常的执行功能了吗?
  • @uglypointer 已经尝试过

标签: php bash


【解决方案1】:

escapeshellcmd() 这样做:

转义 shell 元字符

$run = escapeshellcmd('temperature_sensor_code > /dev/null 2>&1');
var_dump($run);
string(43) "temperature_sensor_code \> /dev/null 2\>\&1"

但是您确实希望将 shell 元字符用作 shell 元字符:

temperature_sensor_code > /dev/null 2>&1
                        ^           ^^^^

您也根本没有进行故障排除:

  • 您丢弃所有命令输出(将其发送到/dev/null 就是这样做的)
  • 您没有收到返回码

我建议:

  • 切换到 exec() 并确保使用其所有参数,而不仅仅是强制参数
  • 在您诊断出问题之前删除&gt; /dev/null

【讨论】:

  • 您的建议让我找到了真正的问题。不是PHP配置而是www-data权限不足
猜你喜欢
  • 2013-11-13
  • 2012-06-11
  • 2019-05-27
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多