Я использую средство ведения журнала Python и имел ту же проблему, что он преобразует правильную последовательность конца строки «\x0D\x00\x0A\x00
» в «\x0D\x0A\x00
».
Выход программы, который я хочу зарегистрировать через Python, - это UTF-16
, как вы можете видеть.
Чтобы избежать этого, Python делает что-то отличное от простого написания байтов, которое он получает из stdout в файл журнала, я пытался добавить encoding="UTF-8"
в logging.FileHandler()
.
В результате «\x0D
» больше не печатается, и вместо этого я получаю «\x0A\x00\x0A\x00
». Это немного лучше, я думаю.
В Linux, похоже, нет проблем с этим. Я использую тот же сценарий, но моя программа печатает UTF-8
символов.
(Осталось два вопроса: почему Python добавляет еще одну новую строку? И возможно ли записывать дополнительную информацию в файл журнала? Помещая «U» перед строками или используя «...». Encode (UTF- 16) не работает, но в противном случае файл журнала будет содержать строки разных кодировок и станет бесполезным ...)
Можно ли использовать регулярное выражение для удаления непечатаемых символов с вывода, который вы отправляете в файл? –
, но тогда я все еще вижу каждую итерацию обновления, но хорошая идея. – jondavidjohn
Как оказалось, терминалы принципиально разные, чем плоские журналы файлов. Один из них предназначен для временного (и, следовательно, невидимого обновления); другой - это * журнал *. – Amber