私は Windows を使用していますが、Python が (非常に効果的に) スタンドアローンの'\n'
文字を STDOUT に送信することを妨げています。たとえば、次のように出力されますfoo\r\nvar
。
sys.stdout.write("foo\nvar")
この「機能」をオフにするにはどうすればよいですか? 出力がパイプ処理されているため、最初にファイルに書き込むことはできません。
私は Windows を使用していますが、Python が (非常に効果的に) スタンドアローンの'\n'
文字を STDOUT に送信することを妨げています。たとえば、次のように出力されますfoo\r\nvar
。
sys.stdout.write("foo\nvar")
この「機能」をオフにするにはどうすればよいですか? 出力がパイプ処理されているため、最初にファイルに書き込むことはできません。
何かを書く前に、次のことを試してください。
import sys
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
一時的にバイナリモードに変更したいだけなら、自分でラッパーを書くことができます:
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