我urllib2
用来从 url 读取数据,下面是代码片段:
data = urllib2.urlopen(urllink)
for lines in data.readlines():
print lines
我打开的网址实际上是一个 cgi 脚本,它进行一些处理并并行打印数据。CGI 脚本大约需要 30 分钟才能完成。所以使用上面的代码,我只能在 CGI 脚本执行完成 3o 分钟后看到输出。
如何在可用时立即从 url 读取数据并打印出来。
我urllib2
用来从 url 读取数据,下面是代码片段:
data = urllib2.urlopen(urllink)
for lines in data.readlines():
print lines
我打开的网址实际上是一个 cgi 脚本,它进行一些处理并并行打印数据。CGI 脚本大约需要 30 分钟才能完成。所以使用上面的代码,我只能在 CGI 脚本执行完成 3o 分钟后看到输出。
如何在可用时立即从 url 读取数据并打印出来。
直接在文件对象上循环:
for line in data:
print line
这会逐行读取传入的数据流(在内部,.readline()
每次迭代时都会调用套接字文件对象)。这确实假设您的服务器正在尽快发送数据。
调用.readlines()
(复数)保证您在开始循环之前阅读整个请求,不要那样做。
或者,使用requests
库,它对请求流有更明确的支持:
import requests
r = requests.get(url, stream=True)
for line in r.iter_lines():
if line: print line
请注意,这仅在您的服务器立即开始流式传输数据时才有效。如果您的 CGI 在该过程完成之前不生成数据,则尝试流式传输数据是没有意义的。