python tarfile将tar写入管道

时间:2014-08-15 19:39:46

标签: python pipe tarfile

我想创建一个tar文件并将其传输到http上传。

然而,似乎python tarfile模块执行搜索,这使得无法管道到下一个进程。

这是代码

tar = tarfile.open('named_pipe', mode='w')
tar.add('file1')
p.close()

' named_pipe'是由mkfifo命令创建的命名管道文件 当我运行它并在另一个终端中捕获named_pipe时,我收到了错误

tar = tarfile.open('named_pipe', mode='w')
  File "/usr/lib/python2.7/tarfile.py", line 1695, in open
    return cls.taropen(name, mode, fileobj, **kwargs)
  File "/usr/lib/python2.7/tarfile.py", line 1705, in taropen
    return cls(name, mode, fileobj, **kwargs)
  File "/usr/lib/python2.7/tarfile.py", line 1566, in __init__
    self.offset = self.fileobj.tell()
IOError: [Errno 29] Illegal seek

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

我们做了类似的事情,但是从另一方面来看。我们有一个Web应用程序,它将tarfile提供给访问者浏览器,这意味着我们通过http会话流式传输它。诀窍是将打开和可写的文件句柄传递给tarfile.open()调用,同时将模式设置为“w |”。像这样:

# assume stream is set to your pipe

with tarfile.open(name="upload.tar", 
    mode = "w|", 
    fileobj = stream, 
    encoding = 'utf-8') as out:

    out.add(file_to_add_to_tar)