On 12/20/2019 04:19 AM, Dr Rainer Woitok wrote:

One of my Python scripts basically does the following:

source = tarfile.open(name=tar_archive  , mode='r|*')
dest   = tarfile.open(fileobj=sys.stdout, mode='w|', format=fmt)

  .
  .
  .

source.close()
dest.close()

In an attempt to move my Python scripts  from Python 2.7 to Python 3.6 I
ran into the problem  that under Python 3.6  the call to  "dest.close()"
fails:

Traceback (most recent call last):
  File ".../tar_archive.copy", line 137, in <module>
  dest.close()
  File "/usr/lib64/python3.6/tarfile.py", line 1742, in close
  self.fileobj.close()
  File "/usr/lib64/python3.6/tarfile.py", line 467, in close
  self.fileobj.write(self.buf)
TypeError: write() argument must be str, not bytes

In Python 3 `sys.stdout` is a character interface, not bytes.

There are a couple solutions to the Python 3 aspect of the problem here:

  https://stackoverflow.com/q/908331/208880

If those answers do not work on Python 2 you'll need to detect which version 
you are on and act appropriately, perhaps hiding that bit of complexity in a 
function or class.

--
~Ethan~
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to