簡體   English   中英

將Python標准輸出記錄到文件中,並帶有活動標准輸出(退格/更新)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM