Ulli Horlacher wrote: > Ulli Horlacher <frams...@rus.uni-stuttgart.de> wrote: > >> With >> >> taro = tarfile.open(fileobj=sock.makefile('w',kB64),mode='w|') >> >> I get no more error. > > Of course, this is the writing client. > > Now I have a small problem with the reading client. > > This code works so far: > > sfo = sock.makefile('r') > taro = tarfile.open(fileobj=sfo,mode='r|') > taro.extractall(path=edir) > > But it does not writes anything to the terminal to inform the user. > > When I use: > > for member in taro.getmembers(): > print('extracting "%s"' % member.name) > taro.extract(member) > > I get the error: > > File "/usr/lib/python2.7/tarfile.py", line 556, in seek > raise StreamError("seeking backwards is not allowed") > > Of course, a stream is not seekable. > > Any ideas?
A look into the source is often helpful ;) $ cat extract_from_stream.py import sys from tarfile import TarFile class MyTarFile(TarFile): def extract(self, member, path="."): print "extracting", member return TarFile.extract(self, member, path) tf = MyTarFile.open(fileobj=sys.stdin, mode="r|") tf.extractall() $ touch foo bar $ tar -cf archive.tar foo bar $ python extract_from_stream.py < archive.tar extracting <TarInfo 'foo' at 0x7f2b3f394890> extracting <TarInfo 'bar' at 0x7f2b3f3a4bd0> -- https://mail.python.org/mailman/listinfo/python-list