我有一个刮刀可以刮取一个网站(用 python 编写)。在抓取网站时,打印即将用 CSV 写入的行。Scraper 是用 Python 编写的,现在我想通过 PHP 代码执行它。我的问题是
如何打印由 python 代码打印的每一行。
我使用了 exec 函数,但它对我没有用,并在执行所有程序后给出输出。所以;
是否可以在通过 PHP 执行时打印 python 输出。
简单案例
假设scraper的执行仅限于php运行时,通过popen运行它:http: //php.net/manual/en/function.popen.php
更多涉案案例
如果您希望刮板在后台运行并且仅不时通过 php 连接到它,您可以使用一些 pub/sub 工具包或在刮板中实现一个小型 Web 服务器,您可以使用 fopen("https: //localhost:port/...") 或 curl。许多其他 rpc 机制是可能的,域套接字、监视文件、sysv rpc...
我想我对你在说什么有一个公平的想法,但我不太确定你的意思。
如果您的意思是说每次 python 脚本执行打印时,您希望 php 代码输出打印的内容?
如果是这种情况,您可以通过 HTTP 将其作为 POST DATA 传递。也就是说,您可以将其发送到 PHP 脚本,而不是在 Python 中打印,该脚本会在接收到数据时将其打印出来。
我不太确定这是否是你想要的。
我会使用标准输出而不是文件进行通信。这意味着 python 脚本写入标准输出,而 php 脚本读取它。
使用proc_open您可以从 php 控制 python 进程并读取它的输出。
而不是使用exec
你可以使用passthru
,它将数据直接输出到浏览器。http://php.net/manual/en/function.passthru.php
这应该足以从您的脚本中获取 println 。
只需使用system()
而不是exec()
. exec()
将外部程序的所有标准输出行保存到一个数组中,但system()
“在发生时”刷新标准输出输出。
为了进行正确的通信,您需要设置任何介质,因此您可以使用 fifo,通过它您可以在 python 中编写字符串并使用 php 读取它。
对于 PHP fifo http://php.net/manual/en/function.posix-mkfifo.php