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(\n2 等)的内容,它会自动转换为 CRLF(\r\n)。如何停止此转换?

您需要以二进制方式写入stdout;默认是文本模式,翻译你写的所有东西

根据 Issue4571,您可以通过直接写入 stdout 使用的内部缓冲区来做到这一点。

sys.stdout.buffer.write(line)

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

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