12

私は Windows を使用していますが、Python が (非常に効果的に) スタンドアローンの'\n'文字を STDOUT に送信することを妨げています。たとえば、次のように出力されますfoo\r\nvar

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

この「機能」をオフにするにはどうすればよいですか? 出力がパイプ処理されているため、最初にファイルに書き込むことはできません。

4

2 に答える 2

13

何かを書く前に、次のことを試してください。

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
于 2012-04-04T22:53:46.867 に答える
-4

文字列の前に「r」を追加します

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

予想通り、印刷にも対応しています。

于 2012-04-06T22:55:29.117 に答える