使用PHP执行Python程序
我可以像这样在浏览器中用PHP直接执行Python程序吗?
exec("python myProgram /Applications/MAMP/htdocs/somefile.xml");
或者像这样:
exec("/path/to/python path/to/myProgram /Applications/MAMP/htdocs/somefile.xml");
这些方法中有哪个是正确的吗?
如果不对,那正确的方法应该是什么呢?
谢谢
3 个回答
0
嗯,为什么不呢?
要注意的是,你并不是在“浏览器”里执行这个,而是在服务器端,也就是在页面被处理的时候。
想想看,页面在exec
执行完之前是不会返回的,所以这其实取决于你到底想做什么。
1
如果你想同时获取输出,可以使用 proc_open
(它可以完全连接输入和输出)或者 popen
(可以获取输入或输出中的任意一个)
1
我更喜欢使用 proc_open()
,正如 mvds 所建议的那样,因为使用 exec()
或 shell_exec()
时,你无法向标准输入(STDIN)写入数据,也无法从标准输出(STDOUT)读取数据。此外,proc_open()
还允许你设置自己的环境变量 - $_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);
}