10

我有一个刮刀可以刮取一个网站(用 python 编写)。在抓取网站时,打印即将用 CSV 写入的行。Scraper 是用 Python 编写的,现在我想通过 PHP 代码执行它。我的问题是

如何打印由 python 代码打印的每一行。

我使用了 exec 函数,但它对我没有用,并在执行所有程序后给出输出。所以;

是否可以在通过 PHP 执行时打印 python 输出。

4

7 回答 7

4

如果我理解得很好,你的 python刮板输出到一个文件,你想“活”通过 php 显示输出。在使用filemtime知道文件是否已更新的 php 中执行和循环怎么样?您可能会添加一点睡眠,以免服务器超载。

如果您使用的是网页,则可以使用 AJAX 定期重新加载页面的相关部分。

希望这对您有所帮助。

于 2012-12-09T12:18:15.770 回答
2

简单案例

假设scraper的执行仅限于php运行时,通过popen运行它:http: //php.net/manual/en/function.popen.php

更多涉案案例

如果您希望刮板在后台运行并且仅不时通过 php 连接到它,您可以使用一些 pub/sub 工具包或在刮板中实现一个小型 Web 服务器,您可以使用 fopen("https: //localhost:port/...") 或 curl。许多其他 rpc 机制是可能的,域套接字、监视文件、sysv rpc...

于 2012-12-19T19:33:47.077 回答
0

我想我对你在说什么有一个公平的想法,但我不太确定你的意思。

如果您的意思是说每次 python 脚本执行打印时,您希望 php 代码输出打印的内容?

如果是这种情况,您可以通过 HTTP 将其作为 POST DATA 传递。也就是说,您可以将其发送到 PHP 脚本,而不是在 Python 中打印,该脚本会在接收到数据时将其打印出来。

我不太确定这是否是你想要的。

于 2012-12-19T12:19:04.723 回答
0

我会使用标准输出而不是文件进行通信。这意味着 python 脚本写入标准输出,而 php 脚本读取它。

使用proc_open您可以从 php 控制 python 进程并读取它的输出。

于 2012-12-17T21:02:01.023 回答
0

而不是使用exec 你可以使用passthru,它将数据直接输出到浏览器。http://php.net/manual/en/function.passthru.php

这应该足以从您的脚本中获取 println 。

于 2012-12-18T11:19:05.883 回答
0

只需使用system()而不是exec(). exec()将外部程序的所有标准输出行保存到一个数组中,但system()“在发生时”刷新标准输出输出。

于 2012-12-21T12:04:49.630 回答
0

为了进行正确的通信,您需要设置任何介质,因此您可以使用 fifo,通过它您可以在 python 中编写字符串并使用 php 读取它。

对于 PHP fifo http://php.net/manual/en/function.posix-mkfifo.php

对于 Python http://www.doughellmann.com/PyMOTW/Queue/

于 2012-12-19T19:19:36.933 回答