Skip to content

Should init() be wrapping stdout on Linux? #209

@DanielFEvans

Description

@DanielFEvans

When using colorama in a non-interactive terminal (e.g. stdout being piped to file) on Linux, colorama.init() is hooking into sys.stdout, resulting in occasional strange results.

Looking at the documentation, there are a few lines that state:

"Colorama makes this work on Windows, too, by wrapping stdout [...] On other platforms, Colorama does nothing."

Example colorama_test.py script:

import sys
import colorama

print(sys.stdout)
colorama.init()
print(sys.stdout)

If I run python colorama_test.py in a bash terminal, colorama makes no change to sys.stdout:

<open file '<stdout>', mode'w' at 0x7f9f178ab150>
<open file '<stdout>', mode'w' at 0x7f9f178ab150>

However, if I run python colorama_test.py > out.txt, sys.stdout is wrapped:

<open file '<stdout>', mode'w' at 0x7f75cabe1150>
<colorama.ansitowin32.StreamWrapper object at 0x7f75caaa0f10>

Should this be happening?

For completeness, the "occasional strange results" I see occur when writing to stdout via stdout.write; partial traceback is:

[...]
    sys.stdout.write(struct.pack('i', value))
  File "/home/jbanorthwest.co.uk/danielevans/venvs/farmcat/lib/python2.7/site-packages/colorama/ansitowin32.py", line 41, in write
    self.__convertor.write(text)
  File "/home/jbanorthwest.co.uk/danielevans/venvs/farmcat/lib/python2.7/site-packages/colorama/ansitowin32.py", line 162, in write
    self.write_and_convert(text)
  File "/home/jbanorthwest.co.uk/danielevans/venvs/farmcat/lib/python2.7/site-packages/colorama/ansitowin32.py", line 184, in write_and_convert
    text = self.convert_osc(text)
  File "/home/jbanorthwest.co.uk/danielevans/venvs/farmcat/lib/python2.7/site-packages/colorama/ansitowin32.py", line 256, in convert_osc
    winterm.set_title(params[1])
AttributeError: 'NoneType' object has no attribute 'set_title'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions