Problems with "Tarfile.close()"

Chris Angelico rosuav at gmail.com
Fri Dec 20 14:45:24 EST 2019


On Sat, Dec 21, 2019 at 6:13 AM Peter Otten <__peter__ at web.de> wrote:
>
> Dr Rainer Woitok wrote:
>
> > Ethan,
> >
> > On Friday, 2019-12-20 07:41:51 -0800, you wrote:
> >
> >> ...
> >> In Python 3 `sys.stdout` is a character interface, not bytes.
> >
> > Does that mean that with Python  3 "Tarfile" is  no longer able to write
> > the "tar" file  to a pipe?   Or is there now  another way  to write to a
> > pipe?   And if that new way also  worked with Python  2, it would be even
> > better ... :-)
> >
> >> There are a couple solutions to the Python 3 aspect of the problem here:
> >>
> >>    https://stackoverflow.com/q/908331/208880
> >
> > Using "sys.stdout.buffer"  seems to work  in Python 3  (at least with my
> > current rather trivial test case) but does not work in Python 2.  Quest-
> > ion: what is the cheapest way  to retrieve the Python version the script
> > is executing in?
>
> While I didn't look into the stackoverflow page an easy way to get something
> that accepts bytes may be
>
> # untested
> stdout = sys.stdout
> try:
>     stdout = stdout.buffer
> except AttributeError:
>     pass

This construct can be simplified down to:

stdout = getattr(sys.stdout, "buffer", sys.stdout)

ChrisA


More information about the Python-list mailing list