Как правильно вызвать скрипт Python 3 из PHP?

Я хотел бы вызвать скрипт Python 3 (с аргументами) из PHP и обработать возвращенную информацию.

//server.php
arg1 = $_POST['arg1'];
arg2 = $_POST['arg2'];
args = array(arg1,arg2);

//pseudo code - THIS IS WHERE MY QUESTION IS
//$results = call_python3_script_somehow

echo $results

#script.py
import MyProcess

#take in args somehow

args = [arg1,arg2]
result = MyProcess(args)

return result

Проблема в том, что об этом много раз спрашивали о переполнении стека, и у каждого есть разные ответы:

$output = array();
exec("python hi.py", $output);
var_dump( $output);
$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;
// This is the data you want to pass to Python
$data = array('as', 'df', 'gh');

// Execute the python script with the JSON data
$result = shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data)));
$mystring = system('python myscript.py myargs', $retval);

Все эти ответы приняты и имеют приличное количество голосов. Какой из этих способов является правильным способом вызова скрипта Python из PHP?

1

Решение

Все они делают одно и то же, но имеют разные результаты. Я бы предложил использовать тот, который лучше всего подходит для вашего сценария.

Я часто использую shell_exec, потому что мне легче отлаживать, так как все, что мне нужно, это просто напечатать строку в <pre> теги. Есть одна вещь, которую люди склонны забывать, особенно когда они пытаются что-то отладить. Использование: 2>&1 в конце сценария и аргументов. Если взять один из приведенных выше примеров, это будет выглядеть примерно так:

shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data)) . " 2>&1");

Это также позволяет просматривать вывод ошибок, что, скорее всего, понадобится вам, чтобы выяснить, почему он работает в командной строке, но он не работает при запуске из PHP.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]