【问题标题】:Reading a HTTPResponse to a tar file将 HTTPResponse 读取到 tar 文件
【发布时间】:2017-04-15 11:31:37
【问题描述】:

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

>>> 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 文件。我怎样才能做到这一点?我尝试了很多东西,但它只适用于文件,而不适用于目录。

【问题讨论】:

    标签: python io stream response tar


    【解决方案1】:

    流是原始 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。

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2022-01-14
      相关资源
      最近更新 更多