На моем веб-сайте есть функция JavaScript, которая выполняет вызов POST ajax к PHP-файлу на сервере (GoDaddy VPS под управлением CentOS 6), который выполняет скрипт Python через shell_exec() и возвращает вывод.
Функция Javascript:
function submitdivsheet()
{
$.post("test.php", {}, function(data,status){
console.log(data);
});
}
PHP-скрипт: test.php
<?php
$command = escapeshellcmd('python3.6 test.py');
$output = shell_exec($command);
echo $output;
?>
Скрипт Python: test.py
import sys
print("This is the output")
Когда я пытаюсь запустить php-файл из терминала bash на CPanel, проблем не возникает, как показано здесь. Однако при запуске функции javascript на консоль выводится только пустая строка. Я не уверен, почему она запускается только на терминале CPanel, но подозреваю, что это может быть проблема с разрешениями. Как исправить эту проблему?
ПРИМЕЧАНИЕ: Это прекрасно работает как на сервере, так и из вызова POST, если shell_exec() отсутствует. Похоже, что проблема вызвана shell_exec.
EDIT: После изменения PHP-скрипта на:
<?php print shell_exec('echo $PATH'); ?>
Этотэто выход.
решение1
При вызове python с веб-сервера отсутствуют значения окружения, которые присутствуют в вашей оболочке. Кандидатами являются PATH
и переменные, упомянутые на странице руководства python.
Попробуй это:
env -i python3.6 test.py
Вы, вероятно, получите некоторые сообщения об ошибках, которые, как мы надеемся, укажут на проблему. Затем попробуйте переменные, которые присутствуют в вашей оболочке, например:
env -i PYTHONHOME=$PYTHONHOME python3.6 test.py
Добавьте все необходимые переменные окружения. Когда это сработает, добавьте их в вызов скрипта. При вызове скрипта вы должны предоставить фактические значения для переменных, вы не можете ссылаться на них как на $PYTHONHOME
.