Я могу просто выполнить программу Python с помощью PHP как это? (в браузере)
exec("python myProgram /Applications/MAMP/htdocs/somefile.xml");
или как это:
exec("/path/to/python path/to/myProgram /Applications/MAMP/htdocs/somefile.xml");
Какой-либо этот метод корректен?
В противном случае, каков должен быть правильный способ сделать это?
Спасибо
Я бы предпочел использовать proc_open ()
, как предлагает mvds, поскольку вы не можете писать в STDIN или читать из STDOUT с помощью exec ()
/ shell_exec ()
, а также предоставляет собственный набор переменных окружения - $ _ ENV
.
Пример фрагмента, извлеченный из моего кода:
$process = proc_open(
"{$command}",
array(
array('pipe', 'r'),
array('pipe', 'w'),
array('pipe', 'w')
),
$pipes,
NULL,
$_ENV
);
if(is_resource($process)){
fwrite($pipes[0], $string);
fclose($pipes[0]);
$rt = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$rtErr = stream_get_contents($pipes[2]);
fclose($pipes[2]);
$exitCode = proc_close($process);
}
Ага, почему бы и нет?
Обратите внимание, что вы выполняете это не «в браузере», а на стороне сервера, в то время как страница проходит предварительную обработку.
Учтите, что страница не вернется, пока не завершится exec
, так что это действительно зависит от того, что именно вы пытаетесь сделать.
, если вы также хотите захватить вывод, используйте proc_open
(полное подключение к fd, т.е. вход и выход) или popen
(вход или выход)