Ich benutze die Protokollierung von Python und hatte das gleiche Problem, dass es die korrekte Zeilenende-Sequenz "\x0D\x00\x0A\x00
" in "\x0D\x0A\x00
" umwandelt. Die Programmausgabe, die ich über Python protokollieren möchte, ist UTF-16
, wie Sie sehen können.
Um zu vermeiden, dass Python nichts anderes tut als nur die Bytes zu schreiben, die es von stdout in die Logdatei bekommt, habe ich versucht, zu logging.FileHandler()
hinzuzufügen. Das Ergebnis ist, dass '\x0D
' nicht mehr gedruckt wird und stattdessen "\x0A\x00\x0A\x00
" angezeigt wird. Das ist ein bisschen besser, denke ich.
Unter Linux scheint es, dass es kein Problem damit gibt. Ich benutze das gleiche Skript dort, aber mein Programm druckt stattdessen UTF-8
Zeichen.
(Es gibt zwei Fragen hier: Warum fügt Python einen weiteren Zeilenumbruch hinzu? Und ist es möglich, zusätzliche Informationen in das Logfile zu schreiben? Setzen Sie ein 'U' vor Zeichenfolgen oder verwenden Sie "...". Encode (UTF- 16) funktioniert nicht, aber ansonsten enthält das Logfile Zeichenketten verschiedener Codierungen und wird unbrauchbar ...)
Können Sie einen Regex verwenden, um die nicht druckbaren Zeichen von der Ausgabe, die Sie an die Datei senden, zu entfernen? –
aber dann sehe ich immer noch jede Update-Iteration, gute Idee. – jondavidjohn
Wie sich herausstellt, sind Terminals grundsätzlich andere Dinge als flache Dateiprotokolle. Man ist entworfen, um vorübergehend zu sein (und folglich unsichtbar aktualisierbar); der andere ist als * log * konzipiert. – Amber