Howdy all, When I want to wrap a binary stream to provide a text stream, such as the ‘Popen.stdout’ attribute from a subprocess, I can use ‘io.TextIOWrapper’.
That works on Python 3:: $ python3 Python 3.4.4rc1 (default, Dec 7 2015, 11:09:54) [GCC 5.3.1 20151205] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import subprocess >>> import io >>> gnupg_subprocess = subprocess.Popen(["/usr/bin/gpg", "--version"], stdout=subprocess.PIPE) >>> gnupg_stdout = io.TextIOWrapper(gnupg_subprocess.stdout) >>> type(gnupg_stdout) <class '_io.TextIOWrapper'> but not Python 2:: $ python2 Python 2.7.11 (default, Dec 9 2015, 00:29:25) [GCC 5.3.1 20151205] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import subprocess >>> import io >>> gnupg_subprocess = subprocess.Popen(["/usr/bin/gpg", "--version"], stdout=subprocess.PIPE) >>> gnupg_stdout = io.TextIOWrapper(gnupg_subprocess.stdout) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'file' object has no attribute 'readable' I'm trying to write code that, as far as practicable, works unchanged on Python 2 and Python 3. How do I wrap an arbitrary byte stream – already opened, such as a ‘Popen.stdout’ attribute – in a text wrapper with a particular encoding? -- \ “With Lisp or Forth, a master programmer has unlimited power | `\ and expressiveness. With Python, even a regular guy can reach | _o__) for the stars.” —Raymond Hettinger | Ben Finney -- https://mail.python.org/mailman/listinfo/python-list