将httpresponse读取到焦油文件



我正在使用docker-py从容器中读取文件和文件夹。当我使用该方法get_archive()时,我想将其保存到焦油文件中,因为它返回了原始焦油数据流的元组以及统计信息:

>>> import docker
>>> cli = docker.Client()
>>> ctnr = cli.create_container('busybox', 'true')
>>> stream, stat = cli.get_archive(ctnr, '/bin/sh')
>>> print(stat)
{u'linkTarget': u'', u'mode': 493, u'mtime': u'2015-09-16T12:34:23-07:00', u'name': u'sh', u'size': 962860}

stream对象是requests.packages.urllib3.response.HTTPResponse。我想阅读流上的内容并将其写入焦油文件。我该怎么做?我尝试了很多事情,但它只能与文件一起使用,但与目录无关。

流是原始焦油数据,因此,首先,您需要将其写入文件:

ctnr = cli.create_container('busybox', 'true')
with tempfile.NamedTemporaryFile() as tmp:
    (data, _) = ctnr.get_archive('/bin/sh')
    for chunck in data.stream():
        tmp.write(chunck)

然后,将此文件作为焦油存档打开并提取。

tmp.seek(0)
with tarfile.open(mode='r', fileobj=tmp) as tar:
    tar.extractall()
    tar.close()

请注意,我使用了高级API。

最新更新