2012-04-04 14 views
10

Estoy en Windows y Python me impide (muy efectivamente) que envíe un carácter independiente '\n' a STDOUT. Por ejemplo, la siguiente es la salida foo\r\nvar:Hacer que Python deje de emitir un retorno de carro al escribir nuevas líneas en sys.stdout

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

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

+4

¿Qué código estás usando actualmente? – Amber

+0

Cualquier sys.stdout se abre con. –

+1

Quise decir lo que estás usando para escribir en él? 'print'? 'sys.stdout.write()'? – Amber

Respuesta

11

intente lo siguiente antes de escribir cualquier cosa:

import sys 

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

Si sólo desea cambiar al modo binario temporal, puede escribir usted mismo un envoltorio:

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

Sí, acabo de encontrar eso también. –

+0

@John: 4 segundos de diferencia: D Supongo que ambos usamos los mismos términos de búsqueda;) –

+0

"esto fue el resultado de una búsqueda muy rápida en Google", solo después de que formulé la pregunta de forma que facilitara la búsqueda. Había pasado alrededor de una hora buscando "hacer que Python deje de emitir el retorno del carruaje", así que vine aquí. –

-4

Add 'r' before the string:

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

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

+0

Ahm, imprimirá la barra invertida y la n literalmente? –

Cuestiones relacionadas