Запуск shell_exec () для выполнения скрипта python в экземпляре виртуальной машины Google Cloud Compute - PullRequest
0 голосов
/ 30 апреля 2019

Я занимаюсь разработкой приложения, которое делает что-то за три шага на виртуальной машине в компьютерном движке Google Cloud:

  • 1 - принимает данные от пользователя в виде формы
  • 2 - передает ввод в файл .php, используя $_POST[], который затем запускает команду shell_exec (после проверки через escapecmd()) для запуска сценария python (команда sudo python3 A1.py I1 I2 ... IN), где I1, I2, ... IN входные данные из формы.
  • 3 - Сценарий python записывает вывод в файл .txt, который затем анализируется PHP-скриптом, и вывод выводится.

Так что теперь моя проблема в том, что запуск sudo python3 A1.py I1 I2 ... IN из терминала работает нормально, так как он обновляет файл tmp.txt, который обновляется в файле PHP, и показывает правильный вывод. Однако, если перейти к самому приложению, если я изменю значения в форме на I1 I2 ... IN, то будет отображаться тот же вывод, что и ранее, т. Е. На шаге 2 команда shell_exec() не работает. Таким образом, команда работает из терминала, но не из команды shell_exec() в PHP. Выполнение $output = shell_exec($cmd); var_dump($output); возвращает только значение NULL. Я проверил остальную часть своего кода, все команды, кажется, работают нормально, и значение $ cmd совпадает с тем, что я печатаю в терминале. Я думаю, что это как-то связано с разрешениями, так как я запускаю Apache2 с PHP7.0 в экземпляре Compute Engine.

PHP скрипт:

<?php
...
$path ="sudo python3 A1.py  ".$I1." ".$I2." ".$I3." ".$I4;
$command = escapeshellcmd($path);
$output = shell_exec($command);
var_dump($output);//Shows NULL
echo $output;//shows nothing
echo $command."\n";//Shows sudo python3 A1.py I1 I2 I3 I4
$file = file_get_contents('tmp.txt');
echo $file;
...
?>

Ожидаемые результаты - значение выходных данных должно меняться с изменением формы ввода Фактические результаты - команда изменяется при изменении значений формы ввода, но результат остается таким же, как и при последнем вычислении терминала, и не изменяется при изменении значений входов. Следовательно, shell_exec() не выполняется должным образом.

Может кто-нибудь сказать мне, как это исправить в инстансе виртуальной машины Linux?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...