Make Python stop emitting a carriage return when writing newlines to sys.stdout

前端 未结 2 1356
清歌不尽
清歌不尽 2020-12-18 23:24

I\'m on Windows and Python is (very effectively) preventing me from sending a stand-alone \'\\n\' character to STDOUT. For example, the following will output

相关标签:
2条回答
  • 2020-12-19 00:12

    Try the following before writing anything:

    import sys
    
    if sys.platform == "win32":
       import os, msvcrt
       msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
    

    If you only want to change to binary mode temporarily, you can write yourself a wrapper:

    import sys
    from contextlib import contextmanager
    
    @contextmanager
    def binary_mode(f):
       if sys.platform != "win32":
          yield; return
    
       import msvcrt, os
       def setmode(mode):
          f.flush()
          msvcrt.setmode(f.fileno(), mode)
    
       setmode(os.O_BINARY)
       try:
          yield
       finally:
          setmode(os.O_TEXT)
    
    with binary_mode(sys.stdout), binary_mode(sys.stderr):
       # code
    
    0 讨论(0)
  • 2020-12-19 00:12

    Add 'r' before the string:

    sys.stdout.write(r"foo\nvar")
    

    As expected, it also works for print.

    0 讨论(0)
提交回复
热议问题