- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
如何在 Windows 上将 \n
打印到标准输出?此代码适用于 Python 2,但不适用于 Python 3:
# set sys.stdout to binary mode on Windows
import sys, os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
# the length of testfile created with
# python test_py3k_lf_print.py > testfile
# below should be exactly 4 symbols (23 0A 23 0A)
print("#\n#")
最佳答案
Python 3 已经在二进制模式下配置了标准 I/O,但它有自己的 I/O 实现来进行换行符转换。您可以手动调用 sys.stdout.buffer.write
以使用二进制模式 BufferedWriter
print
。如果您需要使用 print
,那么您将需要一个不使用通用换行符的新文本 I/O 包装器。例如:
stdout = open(sys.__stdout__.fileno(),
mode=sys.__stdout__.mode,
buffering=1,
encoding=sys.__stdout__.encoding,
errors=sys.__stdout__.errors,
newline='\n',
closefd=False)
由于 closefd
为假,关闭此文件不会关闭原始的 sys.stdout
文件描述符。您可以通过 print("#\n#", file=stdout)
显式使用此文件,或替换 sys.stdout = stdout
。原始版本作为 sys.__stdout__
提供。
背景
Python 3 的 io
模块旨在为抽象基类方面的所有类文件对象提供跨平台和跨实现(CPython、PyPy、IronPython、Jython)规范 RawIOBase
、BufferedIOBase
和 TextIOBase
。它在 _pyio
模块中包含一个引用纯 Python 实现。原始 io.FileIO
实现的共同点是一组低级 POSIX 系统调用,例如 read
和 write
,这消除了CRT stdio 不一致的问题。在 Windows 上,POSIX 层只是 CRT 的低 I/O 层,但至少这仅限于单一平台的怪癖。
Windows 的一个怪癖是在其 POSIX I/O 层中具有非标准文本和二进制模式。 Python 通过始终使用二进制模式并在 stdio 文件描述符 1 上调用 setmode
来解决这个问题。
Python 可以通过实现 RawIOBase
的 WinFileIO
注册子类来避免将 Windows CRT 用于 I/O。 issue 12939 中有一个建议的补丁.另一个例子是 win_unicode_console模块,它实现了 WindowsConsoleRawReader
和 WindowsConsoleRawWriter
类。
<子>1. 这给嵌入 Python 并期望 stdio 使用默认文本模式的程序带来了问题。例如,在二进制模式下打印宽字符字符串不再像在 ANSI 文本模式下那样转换为 char
,而且它肯定不会像在 ANSI 文本模式下那样使用 WriteConsoleW
打印在 UTF-16 文本模式下。例如:
Python 2.7.10 (default, May 23 2015, 09:44:00)
[MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys, os, msvcrt, ctypes
>>> ctypes.cdll.msvcr90.wprintf(b'w\x00i\x00d\x00e\x00\n\x00')
wide
5
>>> msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
16384
>>> ctypes.cdll.msvcr90.wprintf(b'w\x00i\x00d\x00e\x00\n\x00')
w i d e
5
关于windows - 使用 Python 3 将 LF 打印到 Windows stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34960955/
我正在编写在 Windows 中运行并输出文本文件的代码,该文本文件后来成为 Linux 程序的输入。当给定的文件具有 CR+LF 而不仅仅是 LF 的换行符时,此程序的行为不正确。 我知道我可以使用
我想知道之间的区别(如果可能的话提供示例)CR LF (Windows)、LF (Unix) 和 CR (Macintosh) 换行符类型。 最佳答案 CR和LF是控制字符,分别编码为0x0D(十进制
我们有一个名为 LineFeed.sh 的 shell 脚本文件它执行将换行符( LF )转换为回车+换行符的功能。我们希望通过 windows 中的批处理文件完成相同的操作。是否可以? Linux
我想查询我的表中有多少行包含一个或多个 实例。我想不出正确的语法。我会尝试 LIKE '%%',但我不知道如何指定这些特殊字符。我试过 where mydata REGEXP '%[.CR.][.LF
我必须编写一个功能类似于 dos2unix 的 C 程序。它将所有 CR LF 替换为仅 LF(DOS 格式到 Unix 格式)。所以这是我的方法。每次我读一行时,我通过查找 \0 来搜索数据的结尾,
我有一个 UTF-16 编码的文件,我想用 Windows 行结尾替换 UNIX 行结尾。我不想碰其他任何东西。 有没有linux命令行工具可以搜索两个字节“0A 00”并用四个字节“0D 00 0A
在 Windows 上 #include int main() { putc('A',stdout); putc('\r',stdout); putc('\n',stdout
在 Windows 中,当您以文本模式从文件(或标准输入)读取字符 \r\n 时,\r 被删除,您只能读取 \n. 是否有一个标准应该如此? 我能确定这对 Windows 上的任何编译器都是正确的吗?
我被聘为顾问,与糟糕的内部人员一起工作 DSL被一家大公司使用。 我说糟糕是因为代码行不是用回车符或换行符来结束每行代码,而是用五个字符的 ASCII 字符串 分隔的。 .这些文件有数千“行”长。任
我正在 Windows 10 上开发一个 Unity 3D C# 项目,并开始一个新的存储库,我将其添加到我的 .gitattributes 中。文件: # These files are text
我正在 Linux 平台上编写一个程序,该程序生成的文本文件将不可避免地在 Windows 平台上查看。 现在,将 std::endl 传递到 ostream 中仅为换行符生成 CR 字符。当然,这些
交换换行符(例如通过某些文本编辑器)是否会破坏 javascript 代码? 最佳答案 两个控制字符都是valid line breaks .事实上你甚至不需要换行符。这只是为了更好的可读性。除了在字
在 MS Windows 上,使用 Python 3 的 pyodbc 模块,我正在使用 PostgreSQL。当我使用 PostgreSQL 的 TEXT 数据类型并尝试存储类 UNIX 的 EOL
我正在学习 C,我有以下代码: #include #include #include int main(int argc, char *argv[]) { double x; print
我想强制 Git 在 Windows 下使用 LF 而不是 CR+LF check out 文件。 我检查了两个配置选项,但无法找到正确的设置组合。 我想将所有文件转换为具有 LF 换行符并在文件中保
我是一名 Java 开发人员,我正在使用 Ubuntu 进行开发。该项目是在 Windows 中使用 Eclipse 创建的,它使用 Windows-1252编码。 为了转换为 UTF-8,我使用了
我有一个字符串,我想控制它的字符串内容 是否包含 (CR、LF 或 CRLF)? if (no CR, LF or CF or LF) in string: echo 'no sepator
我有一个包含“unix 风格”行尾的文本文件:每行末尾有一个 0x0A。 我正在编写一个脚本来修改该文件,以向其中添加新内容。这是在 Windows 上运行的 JScript。代码如下所示:
为什么 Firefox 和 Chrome 在 POST 时将 LF 字符替换为 CR+LF? 我写了以下内容作为测试: function lftest() { var linefeed
这与这个问题非常相似: What is the differrence between `* text=auto` and `* text eol=lf` in .gitattributes? 但我特
我是一名优秀的程序员,十分优秀!