python - 读取 tar 文件的 HTTPResponse

标签 python io stream response tar

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

最佳答案

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

关于python - 读取 tar 文件的 HTTPResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40900292/

相关文章:

java - 为什么 1 的平方根等于 1 在 java 中返回 false?

stream - IBM BigInsights (IBM Hadoop) 与 IBM Watson

python - 在 SQLAlchemy 中通过 association_proxy 分配一组新的多对多相关标签的最优雅的方法是什么?

python - 在 CSV 中嵌入 JSON 的正确格式

java - 以 ANSI 格式读取和写入文本

java - 通过 Resource 读写 Java 文件

node.js - 了解是否可以读取可读流

python - 如何将条形图值更改为百分比 (Matplotlib)

python - 有没有办法测试Python函数或方法是否是直接从shell调用的?

java - 为什么我没有得到 NotSerializableException?