从PHP运行已编译的python脚本

问题描述 投票:0回答:1

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

temperature_sensor_code > /dev/null 2>&1

我已经为sudoers添加了www-data用户。我知道这不是一个好方法,但我需要它来发送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 bash
1个回答
0
投票

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()并确保使用其所有参数而不仅仅是强制参数
  • 摆脱> /dev/null,直到你诊断出来
© www.soinside.com 2019 - 2024. All rights reserved.