Python:Windows 上的 svndumpfilter2 和换行符

标签 python svn

在 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 的标志(以及 stdoutstderr )。所以就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/

相关文章:

python - 如何在 QGraphicsScene 中正确放置小部件

python - 将两个 Pandas 系列减少为一个

svn - 如何使用来自 `read` 的变量作为另一个程序的参数?

.net - 现代的 VisualStudio .NET 项目是否仍然使用 Visual SourceSafe 或 SVN?

svn - 在TortoiseSVN中,提交后添加评论?

python - 在双数组列表中对日期时间进行排序

python - pandas 内的 np reshape 应用

python - 根据列中的范围扩展 Pandas 数据框

windows - 在 Windows XP 上删除 .svn 目录时出现问题

SVN - 如果我们一次提交一个巨大的文件列表而不是多次提交,我们有哪些好处?