PHP和Python之间的通信

时间:2011-05-11 14:12:09

标签: php python ajax ipc

我正在尝试为一些python脚本构建一个Web界面。问题是我必须使用PHP(而不是CGI),我执行的一些脚本需要相当长的时间才能完成:5-10分钟。 PHP是否可以与脚本通信并显示某种进度状态?这应该允许用户在任务运行时使用网页,并在此期间显示某些状态,或者只是在完成后显示消息。

目前使用exec()并在完成时我处理输出。服务器在Windows机器上运行,因此pcntl_fork将无法工作。

稍后编辑: 使用另一个PHP脚本使用ajax提供主页信息似乎不起作用,因为服务器杀死它(它达到最大执行时间,除非必要,我真的不想增加它)

我在考虑基于套接字的通信,但我不知道在我的情况下这有什么用处(可能会有一些提示?

谢谢

4 个答案:

答案 0 :(得分:7)

您希望进程间通信。插座是第一个浮现在脑海中的东西;您需要为PHP中的连接(在同一台机器上)设置 listen 的套接字,并在Python中设置一个套接字以 connect 连接到侦听套接字发送它的状态。

从Python文档和this socket programming overview查看the Python socket module's documentation (especially the examples at the end)。我确信PHP有类似的资源。

一旦您对要构建的内容有了更具体的了解并需要帮助,请随时在StackOverflow上询问新的问题(如果尚未回答)。

答案 1 :(得分:2)

我认为你必须使用元刷新,并且可能让python将状态写入文件,然后从中读取php。

您也可以使用AJAX使其更具动态性。

此外,可能不应该使用exec()......这会打开一个漏洞世界。

答案 2 :(得分:0)

不幸的是我的朋友,我相信你需要按照你的要求使用套接字。 :(我没有使用它们的经验,但This Python Tutorial on Sockets/Network Programming可以帮助您获得所需的Python套接字交互。(Beau Martinez的链接看起来很有希望。)

您还需要获得一些PHP套接字连接,以便它可以请求状态。

接下来,我的想法是你的Python脚本可能会在循环中运行。因此,我会在该循环的一部分开头放置“检查状态请求”。它会回复一个状态,而该脚本中的后续循环将以更高的状态回复...等等。

祝你好运!

编辑:我认为Thomas Schultz的文件撰写建议可能是最容易实现的。唯一的缺点是等待文件打开 - 你需要确保你的PHP和Python脚本不会挂起或返回失败而不再尝试。

答案 3 :(得分:0)

您可以使用像Gearman这样的排队服务,PHP中的客户端和Python中的工作者,反之亦然。

有人在这里创建了一个示例设置。

https://github.com/dbaltas/gearman-python-worker