python3 对于 win 和 cygwin - 缓冲区中的行结尾
python3 for win and cygwin - line endings in buffer
设置:Cygwin 中 windows 的 python3.6(必须使用 Win 版本,因为 3.5 中引入的功能和 Cygwin 停留在 3.4)
如何从 python 脚本(而不是 \r\n
)输出缓冲区(标准输出)中获取 \n
新行?输出是一个路径列表,我想每行获取一个路径以供其他 Cygwin/Windows 工具进一步处理。
到目前为止我找到的所有答案都与文件写入有关,我只想修改写入标准输出的内容。到目前为止,摆脱 \r
的唯一可靠方法是通过 sed 's/\10//'
管道结果,这很尴尬。
奇怪的是,即使 Windows 应用程序使用脚本输出也不接受它,并带有如下消息:
Can't find file <asdf.txt
>
(注意 > 前换行)
据说sys.stdout.write
正在做纯输出但是在做的时候:
sys.stdout.write(line)
我得到了一个没有任何分隔的路径列表。如果我引入任何类似于 NL(\n
、2
等)的内容,它会自动转换为 CRLF(\r\n
)。如何停止此转换?
您需要以二进制方式写入stdout
;默认是文本模式,翻译你写的所有东西。
根据 Issue4571,您可以通过直接写入 stdout
使用的内部缓冲区来做到这一点。
sys.stdout.buffer.write(line)
请注意,如果您正在编写 Unicode 字符串,您需要先 encode
将它们转换为字节字符串。
sys.stdout.buffer.write(line.encode('utf-8')) # or 'mbcs'
设置:Cygwin 中 windows 的 python3.6(必须使用 Win 版本,因为 3.5 中引入的功能和 Cygwin 停留在 3.4)
如何从 python 脚本(而不是 \r\n
)输出缓冲区(标准输出)中获取 \n
新行?输出是一个路径列表,我想每行获取一个路径以供其他 Cygwin/Windows 工具进一步处理。
到目前为止我找到的所有答案都与文件写入有关,我只想修改写入标准输出的内容。到目前为止,摆脱 \r
的唯一可靠方法是通过 sed 's/\10//'
管道结果,这很尴尬。
奇怪的是,即使 Windows 应用程序使用脚本输出也不接受它,并带有如下消息:
Can't find file <asdf.txt
>
(注意 > 前换行)
据说sys.stdout.write
正在做纯输出但是在做的时候:
sys.stdout.write(line)
我得到了一个没有任何分隔的路径列表。如果我引入任何类似于 NL(\n
、2
等)的内容,它会自动转换为 CRLF(\r\n
)。如何停止此转换?
您需要以二进制方式写入stdout
;默认是文本模式,翻译你写的所有东西。
根据 Issue4571,您可以通过直接写入 stdout
使用的内部缓冲区来做到这一点。
sys.stdout.buffer.write(line)
请注意,如果您正在编写 Unicode 字符串,您需要先 encode
将它们转换为字节字符串。
sys.stdout.buffer.write(line.encode('utf-8')) # or 'mbcs'