Python:svndumpfilter2和Windows上的换行符

时间:2011-07-04 10:00:03

标签: python svn

在Windows上运行svndumpfilter2时,我遇到一个问题似乎源于转储文件有时会有CRLF结尾这一事实。

SVN数据库中的某些文件具有CRLF行结尾。但似乎Python将CRLF计为一个字符(不计算CR字符与文件内容中的以下LF分开)。因此,它无法读取正确数量的字符,并且错过了下一个字块的开始。

所以我的问题是:如何告诉Python将CRLF视为两个独立的字符?

sys.stdin读取流,因此我正在寻找一种方法来更改stdin的换行属性。什么是正确的方式"在Python中做到这一点?

1 个答案:

答案 0 :(得分:3)

更新:我遇到的一种方法是明确将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(以及stdoutstderr)。所以只需python -u myscript.py,其中myscript.py调用stdin.read(1)而没有其他更改。有关详细信息,请参阅python --help

旧:如果您使用的是Windows,那么当您调用sys.stdin.readline(或简单地遍历sys.stdin时,Python应该能够在没有任何干预的情况下处理此问题文件就像对象)。您使用的是sys.stdin.read吗?如果是这样,你需要自己处理这个案子。