PHP与Python之间的通信

10 投票
4 回答
17549 浏览
提问于 2025-04-16 17:27

我正在尝试为一些Python脚本构建一个网页界面。问题是我必须使用PHP(而不是CGI),而且我执行的一些脚本需要花费相当长的时间才能完成:大约5到10分钟。请问PHP能否与这些脚本进行通信,并显示某种进度状态?这样用户在任务运行时可以继续使用网页,并在此期间显示一些状态信息,或者在任务完成时显示一条消息。

目前我使用exec()来执行脚本,完成后处理输出。服务器运行在Windows机器上,所以pcntl_fork这个功能无法使用。

后续编辑:使用另一个PHP脚本通过ajax向主页面提供信息似乎不太奏效,因为服务器会终止它(因为它达到了最大执行时间,我不想随便增加这个时间,除非真的有必要)。

我在考虑基于socket的通信,但我不太明白在我的情况下这有什么用(能给点提示吗?)

谢谢!

4 个回答

1

你可以使用一个叫做 Gearman 的排队服务,客户端用PHP写,工作程序用Python写,或者反过来也可以。

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

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

2

我觉得你可能需要用到一个叫做“meta refresh”的东西,也许还需要让Python把状态写到一个文件里,然后让PHP去读取这个文件。

你也可以使用AJAX,这样可以让整个过程更灵活、更动态。

另外,最好不要用exec()这个函数……因为它会带来很多安全隐患。

8

你想要实现的是进程间通信。首先想到的就是套接字(sockets);你需要在PHP中设置一个套接字来监听连接(在同一台机器上),然后在Python中设置一个套接字来连接这个监听的套接字,并发送它的状态。

可以看看这个Python文档中的套接字编程概述,还有Python socket模块的文档(特别是最后的示例)。我相信PHP也有类似的资源。

一旦你对想要构建的内容有了更具体的想法,并需要帮助,随时可以在StackOverflow上提一个问题(如果还没有人回答的话)。

撰写回答