Python 读取对tar文件的HTTPResponse

Python 读取对tar文件的HTTPResponse,python,io,stream,response,tar,Python,Io,Stream,Response,Tar,我使用从容器中读取文件和文件夹。当我使用方法get_archive()时,我想将其保存到一个tar文件中,因为它返回原始tar数据流的元组,并且stats: >>> import docker >>> cli = docker.Client() >>> ctnr = cli.create_container('busybox', 'true') >>> stream, stat = cli.get_archive(ctnr,

我使用从容器中读取文件和文件夹。当我使用方法
get_archive()
时,我想将其保存到一个tar文件中,因为它返回原始tar数据流的元组,并且stats:

>>> 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
。我想读取流上的内容并将其写入tar文件。我怎样才能做到这一点?我尝试了很多方法,但它只适用于文件,而不适用于目录。

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

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)
然后,将此文件作为tar存档打开并解压缩

tmp.seek(0)
with tarfile.open(mode='r', fileobj=tmp) as tar:
    tar.extractall()
    tar.close()
注意,我使用了高级api