ошибка при использовании exec () для вызова скрипта Python - PullRequest
2 голосов
/ 14 октября 2011

Я пытаюсь вызвать простой скрипт на python

#!/usr/local/python25/bin/python
print "hello world"

из следующего скрипта php

 <?php
    echo exec("/usr/local/python25/bin/python myfile.py");
    ?>

Но ничего не произошло.Пожалуйста, скажите мне, что здесь не так?(Я также проверил другой поток, но не смог решить свою проблему)

Решенный вопрос: я забыл дать разрешение на доступ к / usr / local / python25 / bin / python.После того, как я это сделал, проблема решилась.Спасибо большое за вашу помощь!

Ответы [ 3 ]

3 голосов
/ 14 октября 2011

1.Функция exec просто возвращает последнюю строку из результата команды.
2. Оператор print в python (кроме python 3) автоматически добавляет символ новой строки в конце.

Это причина, по которой вы чувствуете, что ничего не произошло.

Таким способом вы можете получить весь вывод.

exec("/usr/local/python25/bin/python myfile.py 2>&1", $output);
print_r($output);
1 голос
/ 14 октября 2011

Вроде бы очевидный момент, но вы можете запустить скрипт python из терминала? Это на самом деле работает?

Убедитесь, что скрипт исполняется любым пользователем PHP, который запускается как - chmod 777 myfile.py, и просто на всякий случай chmod 777 /usr/local/python25/bin/python. Также убедитесь, что скрипт python находится в том же каталоге, что и скрипт PHP, что и требуется для его метода вызова.

Попробуйте изменить свой PHP-скрипт на это и скажите мне, что вы видите: ( EDITED )

<?php

  // Path to the python script - either FULL path or relative to PHP script
  $pythonScript = 'myfile.py';

  // Path to python executable  - either FULL path or relative to PHP script
  $pythonExec = '/usr/local/python25/bin/python';

  // Check the file exists and PHP has permission to execute it
  clearstatcache();
  if (!file_exists($pythonExec)) {
    exit("The python executable '$pythonExec' does not exist!");
  }
  if (!is_executable($pythonExec)) {
    exit(("The python executable '$pythonExec' is not executable!"));
  }
  if (!file_exists($pythonScript)) {
    exit("The python script file '$pythonScript' does not exist!");
  }

  // Execute it, and redirect STDERR to STDOUT so we can see error messages as well
  exec("$pythonExec \"$pythonScript\" 2>&1", $output);

  // Show the output of the script
  print_r($output);

?>
0 голосов
/ 14 октября 2011

Если вы хотите захватить стандартный вывод подпроцесса, вы должны использовать passthru

Также вам не нужна первая строка этого скрипта Python, если вы вызываете интерпретатор Python напрямую.

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