将tar文件读入BytesIO

时间:2016-09-20 21:25:59

标签: python byte tar

我正在使用Docker-py API来处理和操作Docker个容器。在API中,put_archive()函数要求data字段以字节为单位。 所以,使用我拥有的tarfile库:

import tarfile
import io

container = client.create_container(image="myimage", command="/bin/bash")
source = "~/.ssh/id_rsa.pub"
tarfile = create_tar_file(path=source, name="keys.tar")
# tarfile = "keys.tar"
# How can I read the tar file was a BytesIO() object?
data = io.BytesIO()
client.put_archive(container=container, path="/tmp", data=data)

API说:

  

put_archive container path data

     

使用tar存档作为源,在现有容器中插入文件或文件夹。

     

参数

     

容器 str ) - 将提取文件的容器。
     路径 str ) - 将提取文件的容器内的路径。必须存在。
     数据 bytes ) - 要提取的tar数据

     如果通话成功,

退货 True

     

返回类型:(bool)

     

提升 docker.errors.APIError - 如果服务器返回错误。

我的问题是:

如何将tar文件作为BytesIO()读取,以便将其传递给put_archive()函数?

1 个答案:

答案 0 :(得分:12)

你可以这样做(未经测试,因为我没有安装Docker-py):

with open('keys.tar', 'rb') as fin:
    data = io.BytesIO(fin.read())