Как заархивировать файл в STDOUT с помощью zipfile? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть программа, которая создает zip-файл, содержащий пару файлов, используя zipfile .Он принимает имя выходного файла в качестве аргумента, но если файл или - не задан, он должен записать в STDOUT.Но если я передаю sys.stdout в качестве параметра файла в ZipFile, это выдает мне следующую ошибку:

  File "/usr/lib/python2.7/zipfile.py", line 775, in __init__
    self._start_disk = self.fp.tell()
IOError: [Errno 29] Illegal seek

Вот мой код:

import zipfile, sys

def myopen(name, mode='r'):
    if name is not None:
        try: return open(name, mode)
        except EnvironmentError as e:
            print >> sys.stderr, '%s: %s' % (name, e.strerror)
            sys.exit(3)
    elif mode == 'r': return sys.stdin
    elif mode in 'aw': return sys.stdout
    else: return None

outfile = None

# build the files ...
files = {'file1': 'Here is an example file.\n', 'file2': 'Some more ...'}

with myopen(outfile, 'w') as f, zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED, True) as zf:
    for name, content in files.iteritems(): zf.writestr(name, content)

Как я могу заставить эту работу работать?

...