gpt4 book ai didi

python - 将打印和/或日志记录重定向到面板

转载 作者:行者123 更新时间:2023-12-05 04:35:09 25 4
gpt4 key购买 nike

我制作了一个小应用程序,它使用 Rich 在多个面板中显示实时 View 。
有没有办法将标准(或丰富的)print 语句放入特定面板?
能够在其自己的专用面板中显示日志输出也可以。

我觉得这将是一个非常常见的用例,但我还没有找到任何文档。我认为答案可能是使用 Console.capture() 方法,但我想不出来。

最佳答案

我知道你如何做到这一点。首先,我们需要拦截Rich logger的stdout进程。我们从一个类开始:

from collections import deque
class Logger():
_instance = None
def __init__(self):
self.messages = deque(["sa"])
self.size = 10

def __new__(class_, *args, **kwargs):
if not isinstance(class_._instance, class_):
class_._instance = object.__new__(class_, *args, **kwargs)
return class_._instance

def write(self, message):
self.messages.extend(message.splitlines())
while len(self.messages) > self.size:
self.messages.popleft()

def flush(self):
pass

这是一个单例类。我们需要将此类传递到控制台 API 中作为

from rich.console import Console
c = Console(file=Logger(), width=150)

有一些宽度。然后,我们创建一个日志处理程序

from rich.logging import RichHandler
r = RichHandler(console=c)

这将是我们的日志处理程序

import logging
logging.basicConfig(
level="NOTSET", format=FORMAT, datefmt="[%X]", handlers=[r]
)
logger = logging.getLogger("rich")

稍后,我们需要使用在您管理布局的地方调用的 Logger 类。对我来说,它在 Dashboard 类中。

class Dashboard:
def __init__(self):
self.log_std = Logger()
def update(self, new_parameters):
self.layout["logs"].update(Panel(Text(
"\n".join(self.log_std.messages), justify="right"), padding=(1, 2),
title="[b red]Logs",
))

每次调用 update 方法时,它都会更新我的布局。我的布局更复杂,self.layout["logs"] 我在其中显示日志。

关于python - 将打印和/或日志记录重定向到面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71077706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com