[英]Logging Python stdout to File… with active stdout (backspacing/updating)
好的,因此使用此示例 ,我將標准輸出記錄到文件中並將其發送到終端。
但是,當我查看日志文件時,不處理退格鍵,而是將其與輸出一起打印。
有什么辦法可以記錄python腳本的stdout的“最終”狀態?
這是一個解決方案,它從您鏈接的答案中獲取基本類,並為\\r
和\\b
添加了一些正則表達式處理:
import sys
import re
class Logger(object):
def __init__(self, filename="Default.log"):
self.terminal = sys.stdout
self.log = open(filename, "a")
self.cr_pattern = re.compile("^.*\r", re.M)
self.bs_pattern = re.compile(".\b")
def write(self, message):
self.terminal.write(message)
message = self.bs_pattern.sub('', self.cr_pattern.sub('', message))
self.log.write(message)
sys.stdout = Logger("yourlogfilename.txt")
print "Hello\rGoodbyee\b world!"
示例運行:
$ python test.py
Goodbye world!
$ cat yourlogfilename.txt
Goodbye world!
請注意,通常您應該對正則表達式使用原始字符串文字,這是不應該使用的罕見情況之一。
我使用的是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)不會) t工作。但是否則,日志文件將包含不同編碼的字符串,並且變得無用...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.