Lassen Sie Python keinen Wagenrücklauf mehr ausgeben, wenn Sie Zeilenumbrüche in die Datei sys.stdout schreiben

Ich arbeite unter Windows und Python verhindert (sehr effektiv), dass ich ein Standalone-Programm sende'\n' Zeichen zu STDOUT. Beispielsweise wird Folgendes ausgegebenfoo\r\nvar:

<code>sys.stdout.write("foo\nvar")
</code>

Wie kann ich diese "Funktion" ausschalten? Das Schreiben zuerst in eine Datei ist keine Option, da die Ausgabe weitergeleitet wird.

 John Gietzen05. Apr. 2012, 00:50
Mit was auch immer sys.stdout geöffnet wird.
 Amber05. Apr. 2012, 00:50
Ich meinte, was benutzt du, um darauf zu schreiben?print? sys.stdout.write()?
 Amber05. Apr. 2012, 00:47
Welchen Code verwenden Sie derzeit?
 John Gietzen05. Apr. 2012, 00:52
Beide haben den gleichen Effekt.

Antworten auf die Frage(2)

Lösung für das Problem

Versuchen Sie Folgendes, bevor Sie etwas schreiben:

<code>import sys

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

Wenn Sie nur vorübergehend in den Binärmodus wechseln möchten, können Sie sich einen Wrapper schreiben:

<code>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
</code>
 Niklas B.05. Apr. 2012, 00:55
@ John: 4 Sekunden Unterschied: D Vermutlich haben wir beide die gleichen Suchbegriffe verwendet;)
 John Gietzen05. Apr. 2012, 00:54
Ja, das habe ich auch gerade gefunden.
 John Gietzen07. Apr. 2012, 21:35
"Dies war das Ergebnis einer sehr schnellen Google-Suche", nachdem ich die Frage so formuliert hatte, dass die Suche einfacher wurde. Ich hatte ungefähr eine Stunde damit verbracht, nach "Python dazu zu bringen, kein Wagenrücklauf mehr auszugeben" zu suchen, und kam daher hierher.
 Niklas B.07. Apr. 2012, 23:19
@ John: Oh, das war nicht als Beleidigung gedacht, sorry. Ich habe auch Stunden damit verbracht, etwas zu recherchieren, um schließlich auf einen Link hinzuweisen, der unter den ersten 10 Ergebnissen für gewesen sein mussetwas von meinen fragen, die ich aber zufällig nicht anklickte. Manchmal ist es eine Frage des Glücks :) Viel Spaß!

Fügen Sie 'r' vor der Zeichenfolge ein:

<code></code>

Wie erwartet funktioniert es auch für den Druck.

 Niklas B.25. Apr. 2012, 17:18
Ahm, wird es den Backslash und das n buchstäblich drucken?

Ihre Antwort auf die Frage