You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将logger.warning输出的pandapower诊断日志通过f.write写入txt文件

问题根源
  • pandapower内置诊断模块的所有report_*方法均无返回值(默认返回None):方法执行时仅将诊断信息推送到日志流输出到控制台,不会将诊断文本作为函数返回值返回,因此直接通过f.write(report_methods[key]())无法获取到任何有效内容。
  • 原实现存在冗余执行问题:判断返回值时调用了一次报告方法,写入文件时又重复调用一次,平白增加了不必要的执行开销。
推荐实现方案

最简便、对原有逻辑侵入最小的方案是直接给pandapower的日志对象绑定文件输出处理器,日志会自动同时输出到控制台和目标txt文件,无需修改原有诊断执行逻辑。
完整实现代码如下:

import logging

# ---------------------- 新增日志文件配置部分 ----------------------
# 初始化文件日志处理器,指定输出文件路径、写入模式、编码避免中文乱码
file_log_handler = logging.FileHandler(
    filename="pandapower_diagnostic_report.txt",
    mode="w",
    encoding="utf-8"
)
# 设置日志输出格式,和控制台输出保持一致(仅输出日志内容,不额外加级别、时间前缀)
file_log_handler.setFormatter(logging.Formatter("%(message)s"))
# 获取pandapower使用的根日志对象,绑定文件处理器
pp_logger = logging.getLogger("pandapower")
pp_logger.addHandler(file_log_handler)
# ----------------------------------------------------------------

# 以下是原有的诊断执行逻辑,无需任何修改
report_methods = {
    "missing_bus_indices": diag_report.report_missing_bus_indices,
    "disconnected_elements": diag_report.report_disconnected_elements,
    "different_voltage_levels_connected": diag_report.report_different_voltage_levels_connected,
    "impedance_values_close_to_zero": diag_report.report_impedance_values_close_to_zero,
    "nominal_voltages_dont_match": diag_report.report_nominal_voltages_dont_match,
    "invalid_values": diag_report.report_invalid_values,
    "overload": diag_report.report_overload,
    "multiple_voltage_controlling_elements_per_bus": diag_report.report_multiple_voltage_controlling_elements_per_bus,
    "wrong_switch_configuration": diag_report.report_wrong_switch_configuration,
    "no_ext_grid": diag_report.report_no_ext_grid,
    "wrong_reference_system": diag_report.report_wrong_reference_system,
    "deviation_from_std_type": diag_report.report_deviation_from_std_type,
    "numba_comparison": diag_report.report_numba_comparison,
    "parallel_switches": diag_report.report_parallel_switches
}
log_message_sep = ("\n --------\n")

logger.warning("\n\n_____________ PANDAPOWER DIAGNOSTIC TOOL _____________ \n")
for key in report_methods:
    if key in diag_results:
        report_methods[key]()
        logger.warning(log_message_sep)
logger.warning("_____________ END OF PANDAPOWER DIAGNOSTIC _____________ ")

# ---------------------- 诊断结束后清理资源 ----------------------
pp_logger.removeHandler(file_log_handler)
file_log_handler.close()
注意事项
  • 该方案完全复用pandapower原生的诊断输出逻辑,不会出现内容缺失、格式错乱的问题
  • 无需手动拼接诊断内容,所有控制台输出的日志都会自动同步写入txt文件
  • 诊断完成后记得移除文件处理器并关闭句柄,避免后续运行pandapower时日志被重复写入该文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:31:10