gpt4 book ai didi

python - 是否可以输出和监视标准输入、标准输出和标准错误以外的流? (Python)

转载 作者:IT王子 更新时间:2023-10-29 00:34:07 24 4
gpt4 key购买 nike

这是一道python题,也是一道linux/BSD题。

我有一个包含两个线程的 python 脚本,一个从 Web 下载数据,另一个通过串行端口将数据发送到设备。这两个线程都使用 python 的 logging 模块将大量状态信息打印到标准输出。

我想要的是并排打开两个终端窗口,并让每个终端窗口显示一个线程的输出,而不是让来自两个终端的消息交错在一个窗口中。

除了 stdin、stdout 和 stderr 之外,是否有文件描述符可以写入和连接到其他终端窗口?也许使用 GUI 可以更好地实现这个愿望?

我不确定如何开始。

编辑:我试过将状态消息写入两个不同的文件而不是将它们打印到标准输出,然后在其他终端窗口中使用 tail -f 监视这两个文件,但这并没有用于实时监控,因为在您对它们调用 close() 之前,不会写入文件。

最佳答案

首先,自定义您的日志格式化程序以包含一个线程 id 字段 ( https://docs.python.org/2/library/logging.html#logrecord-attributes )。然后将您的日志记录目标更改为某个文件而不是标准输出。

# A simple logger as print
import logging
import logging.handlers

hdr = logging.FileHandler(filename='output.log')
hdr.setFormatter(logging.Formatter('[%(asctime)s] thread=%(thread)s:%(levelname)s: %(message)s'))
logger = logging.getLogger(__name__)
logger.addHandler(hdr)
logger.setLevel(logging.DEBUG)

import threading


def func():
logger.info('test message')


for i in range(2):
threading.Thread(target=func).start()

您的日志输出现在可能如下所示:

% tail -f output.log
[2015-09-28 15:14:49,782] thread=4344852480:INFO: test message
[2015-09-28 15:14:49,782] thread=4349059072:INFO: test message

运行脚本,打开两个单独的终端,然后使用命令 tail -f output.log | grep thread=<THREAD_ID>通过线程 ID 监控日志。

关于python - 是否可以输出和监视标准输入、标准输出和标准错误以外的流? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32817302/

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