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

如何从Python控制台获取qualysapi模块输出的错误信息内容

具体实现方案

共有两种稳定的实现方式:

方式一:捕获qualysapi模块的独立日志

qualysapi的日志是绑定在名为qualysapi的独立logger实例上的,你可以直接给该logger添加自定义handler,实时捕获输出的日志内容,过滤出目标错误信息即可,参考代码如下:

import logging
from io import StringIO

# 定位qualysapi的logger实例
q_logger = logging.getLogger("qualysapi")
q_logger.setLevel(logging.DEBUG)

# 创建内存缓冲区存储日志输出
log_buffer = StringIO()
stream_handler = logging.StreamHandler(log_buffer)
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(logging.Formatter("%(message)s"))
q_logger.addHandler(stream_handler)

# 此处运行你原本调用Qualys API的业务代码
# ------- 你的业务逻辑开始 -------
# 例如:q_api.request(xxx)
# ------- 你的业务逻辑结束 -------

# 解析捕获到的日志内容
all_logs = log_buffer.getvalue()
# 过滤4xx/5xx相关错误及详情
error_info = []
log_lines = all_logs.splitlines()
for idx, line in enumerate(log_lines):
    if "Error! Received a 4XX client error" in line:
        # 错误信息包含当前行及后续的响应内容,可按需截取
        error_info.append(line)
        # 提取后续的XML错误详情
        if idx + 1 < len(log_lines):
            error_info.extend(log_lines[idx+1: idx+10])
        break

if error_info:
    print("提取到的错误详情:\n", "\n".join(error_info))

# 释放资源
stream_handler.close()
log_buffer.close()

如果模块的logger关闭了向上传播,该方案依然有效,不需要调整模块源码。

方式二:重写请求逻辑自行捕获响应

如果不需要依赖日志,也可以直接重写qualysapi的请求方法,在发请求时直接捕获4xx/5xx响应内容,比捕获日志更稳定可靠:

  1. 继承qualysapi的连接器类,重写request方法
  2. 遇到响应状态码>=400时,直接将响应体内容存入自定义变量,不需要等日志打印

如果只是临时排查问题,也可以直接重定向标准输出到本地文件,后续解析文件提取错误即可,参考代码:

import sys
# 重定向标准输出到文件
origin_stdout = sys.stdout
sys.stdout = open("./qualys_run_log.txt", "w", encoding="utf-8")

# 运行你的业务代码
# ------- 业务逻辑区域 -------
# ------- 业务逻辑区域 -------

# 恢复标准输出
sys.stdout.close()
sys.stdout = origin_stdout

# 读取文件解析错误内容
with open("./qualys_run_log.txt", "r", encoding="utf-8") as f:
    log_content = f.read()
# 按关键字提取错误即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:27:03