You need to enable JavaScript to run this app. Python如何将所有终端输出自动追加到同一文本日志文件
优惠活动
大模型
产品
解决方案
定价
更多

Python如何将所有终端输出自动追加到同一文本日志文件

终端输出自动写入固定日志的实现

面向新手的零依赖实现方案,完全匹配你的使用场景:

  • 所有终端输出(包括print内容、交互回显、程序报错信息)会同时实时显示在终端、自动追加写入同一个固定日志文件,不会因为多次运行生成零散的独立日志文件
  • 完全不影响现有代码的交互逻辑(比如扫码输入的input()步骤)
  • 全部依赖Python自带标准库,不需要安装任何第三方工具

实现步骤

  1. 在原有业务代码的最开头,加入下面这段日志双写配置,不需要修改后面任何原有业务逻辑:
# 补全原有业务需要的标准库导入
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}")
# ------------------------------------------
  1. 配置写完后,直接把之前编写的所有业务代码原样接在后面即可,不需要改动任何print、input的执行逻辑。

效果说明

  • 程序运行时,终端的显示效果和之前完全一致,扫码输入、设备信息打印的流程不会有任何变化,双写模式不会打断原有交互逻辑
  • 所有显示在终端的内容会自动追加到device_check_log.txt文件里,文件只会在第一次运行时自动新建,后续所有运行的记录都往这同一个文件里写,不会重复生成新的独立文件
  • 日志里每次运行的开头会自动插入带实时时间的分隔条,搭配代码里原本打印的设备信息时间戳,翻找历史记录时可以快速区分不同运行的内容

注意:不要使用系统命令的直接重定向(比如python 你的程序.py >> log.txt),这种方式会屏蔽终端的实时输出,导致你看不到输入提示,没法正常完成扫码交互,上述双写方案是兼顾交互和日志记录的最简实现。

内容的提问来源于stack exchange,提问作者BarryKingston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 00:06:04