使用PHP执行Python程序

1 投票
3 回答
2478 浏览
提问于 2025-04-16 01:28

我可以像这样在浏览器中用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);

}

想了解更多,请访问: http://php.net/manual/en/function.proc-open.php

撰写回答