python3 for win和cygwin - 缓冲区中的行结尾

时间:2017-03-07 20:54:05

标签: python cygwin newline

设置:python3.6 for Cygwin中的窗口(必须使用Win版本,因为3.5中引入了功能,Cygwin停留在3.4)

如何从python脚本(而不是\n)获取缓冲区(stdout)输出中的\r\n个新行?输出是一个路径列表,我希望每行获得一个以供其他Cygwin / Windows工具进一步处理。

到目前为止我发现的所有答案都是处理文件写入,我只想修改写入stdout的内容。到目前为止,摆脱\r的唯一可靠方法是通过sed 's/\\10//'来管理结果,这很尴尬。

奇怪的是,即使是使用脚本输出的Windows应用程序也不会接受以下消息:

Can't find file <asdf.txt
>

(注意&gt;之前的换行符)

据说sys.stdout.write正在做纯输出,但在做的时候:

sys.stdout.write(line)

我得到一个没有任何分离的路径列表。如果我介绍类似NL(\n\012等)的任何内容,它会自动转换为CRLF(\r\n)。如何阻止这种转换?

1 个答案:

答案 0 :(得分:1)

您需要以二进制模式写入stdout;默认为文本模式,用于翻译您编写的所有内容

根据Issue4571,您可以直接写入stdout使用的内部缓冲区。

sys.stdout.buffer.write(line)

请注意,如果您正在编写Unicode字符串,则需要先encode将它们用于字节字符串。

sys.stdout.buffer.write(line.encode('utf-8')) # or 'mbcs'