Я хотел бы вызвать скрипт 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?
Все они делают одно и то же, но имеют разные результаты. Я бы предложил использовать тот, который лучше всего подходит для вашего сценария.
Я часто использую shell_exec, потому что мне легче отлаживать, так как все, что мне нужно, это просто напечатать строку в <pre>
теги. Есть одна вещь, которую люди склонны забывать, особенно когда они пытаются что-то отладить. Использование: 2>&1
в конце сценария и аргументов. Если взять один из приведенных выше примеров, это будет выглядеть примерно так:
shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data)) . " 2>&1");
Это также позволяет просматривать вывод ошибок, что, скорее всего, понадобится вам, чтобы выяснить, почему он работает в командной строке, но он не работает при запуске из PHP.
Других решений пока нет …