Haga que Python deje de emitir un retorno de carro al escribir nuevas líneas en sys.stdout

Estoy en Windows y Python (muy efectivamente) me impide enviar un carácter '\n' independiente a STDOUT. Por ejemplo, lo siguiente generará foo\r\nvar :

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

¿Cómo puedo desactivar esta “característica”? Escribir en un archivo primero no es una opción, porque la salida se está canalizando.

Intenta lo siguiente antes de escribir algo:

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

Si solo desea cambiar temporalmente al modo binario, puede escribirse un contenedor:

 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 

Agregue ‘r’ antes de la cadena :

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

Como era de esperar, también funciona para imprimir.