在Windows上运行svndumpfilter2时,我遇到一个问题似乎源于转储文件有时会有CRLF结尾这一事实。
SVN数据库中的某些文件具有CRLF行结尾。但似乎Python将CRLF计为一个字符(不计算CR字符与文件内容中的以下LF分开)。因此,它无法读取正确数量的字符,并且错过了下一个字块的开始。
所以我的问题是:如何告诉Python将CRLF视为两个独立的字符?
从sys.stdin
读取流,因此我正在寻找一种方法来更改stdin的换行属性。什么是正确的方式"在Python中做到这一点?
答案 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
(以及stdout
和stderr
)。所以只需python -u myscript.py
,其中myscript.py调用stdin.read(1)
而没有其他更改。有关详细信息,请参阅python --help
。
旧:如果您使用的是Windows,那么当您调用sys.stdin.readline
(或简单地遍历sys.stdin
时,Python应该能够在没有任何干预的情况下处理此问题文件就像对象)。您使用的是sys.stdin.read
吗?如果是这样,你需要自己处理这个案子。