2010-07-18 29 views
1

我可以简单地使用PHP执行Python程序吗? (在浏览器中)使用PHP执行Python程序

exec("python myProgram /Applications/MAMP/htdocs/somefile.xml"); 

或像这样:

exec("/path/to/python path/to/myProgram /Applications/MAMP/htdocs/somefile.xml"); 

有任何这类方法正确吗?

如果不是,应该采取什么正确的方法来做到这一点?

谢谢

+1

任何特别的原因,为什么你不能使用PHP或者Python只?即:您可以将python程序翻译成php – quantumSoup 2010-07-18 17:28:38

+0

我使用PHP生成XML字符串,然后需要将其作为输入传递给python脚本。就像我在终端窗口中所做的那样:>>> myprogram myfile.xml ....基本上python脚本接受一个xml文件并处理它以生成一个字体文件。 – ssdesign 2010-07-18 17:37:15

+0

你使用的是什么Python程序? – quantumSoup 2010-07-18 17:45:11

回答

1

通过MVDS的建议,你可以,我宁愿使用proc_open()写入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); 

} 

了解更多:http://php.net/manual/en/function.proc-open.php

0

是的,为什么不呢?

请注意,在页面正在被预处理的同时,您并未在浏览器中执行此操作,而是在服务器端执行此操作。

考虑到该网页在exec完成之前不会返回,因此它确实取决于您正在尝试执行的操作。

+0

基本上我有一个python程序,我可以在终端(mac)上像这样成功运行:>>> myptogram myfile.xml .....现在我试图用PHP实现相同的功能。如果按照我在帖子中显示的方式进行操作,结果是否与我的终端窗口方法相同? – ssdesign 2010-07-18 17:28:11

+1

检查了这tooo .... intresting http://www.php.net/manual/en/language.operators.execution.php – 2010-07-18 17:35:24

+0

@ssdesign是的,但为什么你不能只是用PHP重写你的Python程序?因为依靠exec()意味着你需要在代码运行的任何地方设置python,并确保你可以使用exec() – quantumSoup 2010-07-18 17:38:44

1

,如果你想捕捉输出为好,使用proc_open(全FD连接,即输入和输出)或popen(符合或输出)