2016-01-22 3 views
1

Я бы назвал сценарий 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 

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

Выполнить функцию (here и here)

$output = array(); 
exec("python hi.py", $output); 
var_dump($output); 

Функция побег оболочки (here)

$command = escapeshellcmd('/usr/custom/test.py'); 
$output = shell_exec($command); 
echo $output; 

Оболочка выполнить функцию (here)

// 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))); 

Функция системы (here)

$mystring = system('python myscript.py myargs', $retval); 

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

+0

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

ответ

2

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

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

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

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