将换行符写入 sys.stdout 时,使 Python 停止发出回车符
Posted
技术标签:
【中文标题】将换行符写入 sys.stdout 时,使 Python 停止发出回车符【英文标题】:Make Python stop emitting a carriage return when writing newlines to sys.stdout 【发布时间】:2012-04-18 16:54:25 【问题描述】:我在 Windows 上,Python (非常有效地)阻止我向 STDOUT 发送独立的 '\n'
字符。比如下面会输出foo\r\nvar
:
sys.stdout.write("foo\nvar")
如何关闭此“功能”?首先写入文件不是一种选择,因为输出是通过管道传输的。
【问题讨论】:
你目前使用的是什么代码? 无论 sys.stdout 是用什么打开的。 我的意思是你用什么来写它?print
? sys.stdout.write()
?
【参考方案1】:
在写任何东西之前尝试以下操作:
import sys
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
如果你只想暂时改成二进制模式,可以自己写一个wrapper:
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
【讨论】:
@John:相差 4 秒 :D 猜我们都使用了相同的搜索词 ;) “这是一个非常快速的谷歌搜索的结果”,只是在我以使搜索更容易的方式表达问题之后。我花了大约一个小时寻找“让python停止发出回车”,所以我来到了这里。 @John:哦,这不是冒犯的意思,抱歉。我还花了几个小时研究一些东西,最后才指向一个链接,该链接必须在我的 一些 查询的前 10 个结果中,但我只是碰巧没有点击。有时这取决于运气 :) 玩得开心!【参考方案2】:Add 'r' before the string:
sys.stdout.write(r"foo\nvar")
正如预期的那样,它也适用于打印。
【讨论】:
啊,它会打印反斜杠和 n 字面意思吗?以上是关于将换行符写入 sys.stdout 时,使 Python 停止发出回车符的主要内容,如果未能解决你的问题,请参考以下文章