python3 用于缓冲区中的 win 和行结尾



Setup: python3.6 for Windows in Cygwin(由于3.5中引入的功能而Cygwin停留在3.4,因此必须使用Win版本)

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

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

奇怪的是,即使是提供脚本输出的 Windows 应用程序也不接受它,并显示如下消息:

Can't find file <asdf.txt
>

(注意>前换行符)

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

sys.stdout.write(line)

我得到一个没有任何分离的路径列表。如果我引入任何类似于NL(n12等)的东西,它会自动转换为CRLF(rn)。如何停止此转换?

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

根据 Issue4571,您可以通过直接写入stdout使用的内部缓冲区来执行此操作。

sys.stdout.buffer.write(line)

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

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

最新更新