У меня есть программа, которая создает 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)
Как я могу заставить эту работу работать?