使用 urllib2 获取纯文本,结果不完整
Using urllib2 to fetch plain text, result isn't full
我正在编写一个 python 脚本来解析 jenkins 作业结果。我正在使用 urllib2 获取 consoleText,但我收到的文件不完整。获取文件的代码是:
data = urllib2.urlopen('http://<server>/job/<jobname>/<buildid>/consoleText')
lines = data.readlines()
我得到的行数是 2306 行,而控制台日志中的实际行数是 37521。我可以通过 wget
:
检查购买获取文件
$ wget 'http://<server>/job/<jobname>/<buildid>/consoleText'
$ wc -l consoleText
37521
为什么 urlopen 没有给我完整的结果?
更新:
使用 requests
(如@svrist 建议的那样)而不是 urllib2
没有这样的问题,所以我正在切换到它。我的新代码是:
data = requests.get('http://<server>/job/<jobname>/<buildid>/consoleText')
lines = [l for l in data.iter_lines()]
但我仍然不知道为什么 urllib2.urlopen
不能正常工作。
使用 chunked encoding response 返回 Jenkins 构建日志。
Transfer-Encoding: chunked
根据几个 other questions,似乎 urllib2
没有处理整个响应,正如您所观察到的,只有 returns 第一个块。
我还推荐使用 requests 包。
我正在编写一个 python 脚本来解析 jenkins 作业结果。我正在使用 urllib2 获取 consoleText,但我收到的文件不完整。获取文件的代码是:
data = urllib2.urlopen('http://<server>/job/<jobname>/<buildid>/consoleText')
lines = data.readlines()
我得到的行数是 2306 行,而控制台日志中的实际行数是 37521。我可以通过 wget
:
$ wget 'http://<server>/job/<jobname>/<buildid>/consoleText'
$ wc -l consoleText
37521
为什么 urlopen 没有给我完整的结果?
更新:
使用 requests
(如@svrist 建议的那样)而不是 urllib2
没有这样的问题,所以我正在切换到它。我的新代码是:
data = requests.get('http://<server>/job/<jobname>/<buildid>/consoleText')
lines = [l for l in data.iter_lines()]
但我仍然不知道为什么 urllib2.urlopen
不能正常工作。
使用 chunked encoding response 返回 Jenkins 构建日志。
Transfer-Encoding: chunked
根据几个 other questions,似乎 urllib2
没有处理整个响应,正如您所观察到的,只有 returns 第一个块。
我还推荐使用 requests 包。