在向sys.stdout写入换行符时,使Python停止发出回车符

时间:2012-04-04 22:45:21

标签: python windows python-2.7

我在Windows和Python(非常有效)阻止我向STDOUT发送一个独立的'\n'字符。例如,以下内容将输出foo\r\nvar

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

如何关闭此“功能”?首先写入文件不是一种选择,因为输出是通过管道传输的。

2 个答案:

答案 0 :(得分:12)

在写任何内容之前尝试以下操作:

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

答案 1 :(得分:-4)

Add 'r' before the string

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

正如预期的那样,它也适用于打印。