Python: svndumpfilter2 и символы новой строки в Windows - PullRequest
1 голос
/ 04 июля 2011

При запуске svndumpfilter2 в Windows возникает проблема, которая, как представляется, берет свое начало в том факте, что файл дампа иногда имеет окончания CRLF.

Некоторые файлы в базе данных SVN имеют окончания строк CRLF.Но кажется, что Python считает CRLF как один символ (не считая символ CR как отдельный от следующего LF в содержимом файлов).Таким образом, он не может прочитать правильное количество символов и пропускает начало следующего комка.

Итак, мой вопрос: как заставить Python обрабатывать CRLF как два отдельных символа?

Поток читается из sys.stdin, поэтому я ищу способ изменить свойство newline в stdin.Что такое «один правильный путь» сделать это в Python?

1 Ответ

3 голосов
/ 04 июля 2011

Обновление: Один из способов, который мне приходит в голову, это явно установить режим 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

Другой способ - запустить python с флагом -u, что приведет к небуферизованному stdin (а также stdout и stderr). Так что просто python -u myscript.py, где myscript.py вызывает stdin.read(1) без других изменений. См. python --help для получения дополнительной информации об этом.

Старый: Если вы работаете в Windows, Python должен иметь возможность обрабатывать это без какого-либо вмешательства, когда вы вызываете sys.stdin.readline (или просто перебираете sys.stdin, который представляет собой объект, подобный файлу). Вы используете sys.stdin.read вместо этого? Если это так, вам нужно разобраться с этим делом самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...