You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Windows下Python print()自动将换行转换为CRLF

在Windows CMD中让Python输出LF风格换行符的解决办法

兄弟,我太懂你碰到的这个坑了——在Windows CMD里用Python输出带LF的文本,结果一管道或者重定向到文件,就自动变成CRLF了对吧?其实这事儿根源在于Python在Windows环境下,默认把标准输出(stdout)当成文本模式来处理,会自动把单个的\n转换成Windows专属的\r\n(也就是CRLF,十六进制的0D 0A)。

下面给你几个亲测有效的解决办法,按需选就行:

方法一:直接用二进制流输出

绕过文本模式的自动转换,直接往stdout的缓冲区写二进制字节:

#!python3
#coding=utf-8
import sys
# 先把版本信息转成二进制,加上LF换行
sys.stdout.buffer.write(sys.version.encode('utf-8') + b'\n')
# 直接写入带LF的二进制字符串
sys.stdout.buffer.write(b"one\ntwo\n")

这样输出的每一个b'\n'都会被原样保留成LF(十六进制0A),不会被偷偷换成CRLF。

方法二:修改stdout为二进制模式

如果还是想用print函数输出,那可以先把stdout的模式改成二进制:

#!python3
#coding=utf-8
import sys
import os
# 只在Windows环境下执行修改
if sys.platform == 'win32':
    import msvcrt
    # 将stdout的文件描述符设为二进制模式
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

# 现在print输出的\n就会是LF了
print(sys.version)
print("one\ntwo")

修改之后,后续所有print输出的换行符都会保持LF格式,完美适配管道或者重定向场景。

方法三:写文件时指定不转换换行符

如果你的需求是直接写入文件而不是管道输出,也可以在打开文件时加上newline=''参数:

#!python3
#coding=utf-8
import sys
# newline='' 告诉Python不要自动转换换行符
with open('t.txt', 'w', encoding='utf-8', newline='') as f:
    f.write(sys.version + '\n')
    f.write("one\ntwo\n")

这样写入的\n会直接以LF的形式保存到文件里,不会被替换成CRLF。

你可以随便选一种方法试试,运行脚本后用十六进制编辑器查看输出文件,就能看到换行符都是0A啦。

内容的提问来源于stack exchange,提问作者handle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:45:48