Я пытаюсь вызвать простой скрипт 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. После этого я решил проблему. Большое вам спасибо за вашу помощь!
1. Функция exec
просто возвращает последнюю строку из результата команды.
2. Оператор печати в python (кроме python 3) автоматически добавляет новую строку в конце.
Вот почему вы чувствуете, что ничего не случилось.
Таким образом вы можете поймать весь результат.
exec("/usr/local/python25/bin/python myfile.py 2>&1", $output); print_r($output);
Вид здесь очевидный, но можете ли вы запустить скрипт 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); ?>
Если вы хотите захватить субпроцесс 'stdout, вы должны использовать passthru
Также вам не нужна первая строка этого скрипта python, если вы напрямую вызываете интерпретатор python.