使用PHP执行Python程序

使用PHP执行Python程序,php,python,Php,Python,我可以像这样使用PHP简单地执行Python程序吗?(在浏览器中) 或者像这样: exec("/path/to/python path/to/myProgram /Applications/MAMP/htdocs/somefile.xml"); 这个方法正确吗 如果没有,正确的方法应该是什么 谢谢是的,为什么不呢 请注意,在预处理页面时,您不是在“浏览器”中执行此操作,而是在服务器端执行 考虑到页面在exec完成之前不会返回,因此它实际上取决于您正试图执行的操作。如果您也想捕获输出,请使用pr

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

或者像这样:

exec("/path/to/python path/to/myProgram /Applications/MAMP/htdocs/somefile.xml");
这个方法正确吗

如果没有,正确的方法应该是什么

谢谢

是的,为什么不呢

请注意,在预处理页面时,您不是在“浏览器”中执行此操作,而是在服务器端执行


考虑到页面在
exec
完成之前不会返回,因此它实际上取决于您正试图执行的操作。

如果您也想捕获输出,请使用
proc\u open
(完全fd连接,即输入和输出)或
popen
(输入或输出)

我更喜欢使用
proc\u open()
正如mvds所建议的那样,因为您不能使用
exec()
/
shell\u exec()
写入STDIN,也不能从STDOUT读取数据,还可以提供您自己的环境变量集-
$\u 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);

}

阅读更多信息:

基本上我有一个python程序,我可以像这样在终端(mac上)上成功运行:>>>myptogram myfile.xml。。。。。现在我正试图用PHP实现同样的目标。如果我按照我在帖子中展示的方式来做,结果会和我的终端窗口方法一样吗。。。。intrest@ssdesign是的,但是为什么不能用PHP重写python程序呢?因为依赖exec()意味着您将需要在任何运行此代码的地方设置python,并确保允许您使用exec()。我在使用其他语言编写的遗留代码的环境中工作时遇到过一些情况,我希望执行它们,而不是用PHP重写它们。程序员是懒惰的;)为什么不能只使用PHP或Python?Ie:您可以将python程序转换为phpI am,并使用PHP生成XML字符串,然后需要将其作为输入传递给python脚本。就像我在终端窗口中所做的那样:>>>myprogram myfile.xml。。。。基本上,python脚本接受xml文件并对其进行处理以生成字体文件?
$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);

}