Python如何将所有终端输出自动追加到同一文本日志文件
终端输出自动写入固定日志的实现
面向新手的零依赖实现方案,完全匹配你的使用场景:
- 所有终端输出(包括print内容、交互回显、程序报错信息)会同时实时显示在终端、自动追加写入同一个固定日志文件,不会因为多次运行生成零散的独立日志文件
- 完全不影响现有代码的交互逻辑(比如扫码输入的
input()步骤) - 全部依赖Python自带标准库,不需要安装任何第三方工具
实现步骤
- 在原有业务代码的最开头,加入下面这段日志双写配置,不需要修改后面任何原有业务逻辑:
# 补全原有业务需要的标准库导入 import sys import urllib.request import urllib.error from xml.dom import minidom from datetime import datetime # -------- 日志配置(直接复制即可使用)-------- # 固定复用的日志文件名,默认生成在和程序相同的目录下 LOG_FILE = "device_check_log.txt" class DualWriter: """同时往终端、日志文件双写内容的辅助类""" def __init__(self, *output_streams): self.output_streams = output_streams def write(self, content): for stream in self.output_streams: stream.write(content) def flush(self): for stream in self.output_streams: stream.flush() # 以追加模式打开日志文件,不会覆盖历史记录 # 指定utf-8编码,避免Windows系统下日志中文乱码 log_file_handler = open(LOG_FILE, "a", encoding="utf-8") # 把系统默认的标准输出、错误输出,同时指向终端和日志文件 sys.stdout = DualWriter(sys.__stdout__, log_file_handler) sys.stderr = DualWriter(sys.__stderr__, log_file_handler) # 每次运行自动插入分隔条,配合原有时间戳快速定位单次运行记录 print(f"\n{'-'*100}\n本次程序运行开始:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n{'-'*100}") # ------------------------------------------
- 配置写完后,直接把之前编写的所有业务代码原样接在后面即可,不需要改动任何
print、input的执行逻辑。
效果说明
- 程序运行时,终端的显示效果和之前完全一致,扫码输入、设备信息打印的流程不会有任何变化,双写模式不会打断原有交互逻辑
- 所有显示在终端的内容会自动追加到
device_check_log.txt文件里,文件只会在第一次运行时自动新建,后续所有运行的记录都往这同一个文件里写,不会重复生成新的独立文件 - 日志里每次运行的开头会自动插入带实时时间的分隔条,搭配代码里原本打印的设备信息时间戳,翻找历史记录时可以快速区分不同运行的内容
注意:不要使用系统命令的直接重定向(比如
python 你的程序.py >> log.txt),这种方式会屏蔽终端的实时输出,导致你看不到输入提示,没法正常完成扫码交互,上述双写方案是兼顾交互和日志记录的最简实现。
内容的提问来源于stack exchange,提问作者BarryKingston
相关产品推荐
相关产品推荐

