在 Windows 上运行 svndumpfilter2 时,我遇到一个问题,其根源似乎在于转储文件有时具有 CRLF 结尾。
SVN 数据库中的某些文件具有 CRLF 行结尾。但 Python 似乎将 CRLF 视为一个字符(不将 CR 字符与文件内容中的后续 LF 分开计算)。因此,它无法读取正确数量的字符,并且错过了下一个 block 的开始。
所以我的问题是:如何告诉Python将CRLF视为两个单独的字符?
该流是从 sys.stdin 读取的,因此我正在寻找一种方法来更改 stdin 的换行符属性。在 Python 中执行此操作的“一种正确方法”是什么?
最佳答案
更新:我想到的一种方法是显式设置 stdin
的模式为二进制。因此,类似以下内容会将 CRLF 读取为两个字符:
import msvcrt, os, sys
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
while True:
ch = sys.stdin.read(1)
print ord(ch) # CRLF should appear as 13 followed by 10
另一种方法是使用 -u
启动 python导致无缓冲 stdin
的标志(以及 stdout
和 stderr
)。所以就python -u myscript.py
myscript.py 调用 stdin.read(1)
没有其他变化。请参阅python --help
欲了解更多信息。
旧:如果您使用的是 Windows,当您调用 sys.stdin.readline
时,Python 应该能够处理此问题,而无需任何干预。 (或者简单地迭代 sys.stdin
这是一个类似文件的对象)。您在使用 sys.stdin.read
反而?如果是这样,您需要自己处理该情况。
关于Python:Windows 上的 svndumpfilter2 和换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6569920/