ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python prettytable 美化输出:TaoToken 统一 Key 接入 settings.json 配置骨架

Python prettytable 美化输出:TaoToken 统一 Key 接入 settings.json 配置骨架 1. 终端表格乱成一团问题往往不在 prettytable写 Python 脚本的人大多经历过这个阶段调试数据时直接print(list)结果终端里一坨方括号加逗号字段对不齐数字挤在一起几十行下去眼睛就花了。prettytable 就是来解决这个问题的——它能把列表、字典、数据库游标、CSV 文件渲染成带边框的 ASCII 表格字段名居中、数据左对齐终端里一眼就能看清结构。适合谁写运维脚本、跑数据清洗、做本地小工具、给 AI Agent 输出结构化结果的开发者尤其是那些不想装 pandas 又想要可读输出的场景。但真正让人头疼的往往不是表格本身而是脚本里散落各处的 API Key。你可能同时用着两三个 AI 工具一个负责代码补全一个负责对话调试还有一个跑批量任务。每个工具都要单独配 Key环境变量、配置文件、命令行参数混着来换台机器就得重新翻一遍。更麻烦的是有些工具读settings.json有些读.env格式还不一样。这篇就围绕一个具体动作展开用 TaoToken 统一 Key 接入settings.json把多工具的凭证收敛到一处再用 prettytable 把调用结果渲染成终端表格验证整条链路通没通。我试过把 Key 写死在脚本里结果一次误提交到仓库就得全部轮换后来改成集中配置才省心。下面从配置骨架到渲染验证一步步来。2. TaoToken 前置统一 Key 与 API 通道是什么TaoToken 在这里扮演的角色是「一个 Key 走多个模型通道」。你不需要为每个工具单独申请凭证而是拿一个统一 Key通过它的 API 通道去调用不同模型。对脚本来说这意味着settings.json里只需要维护一份凭证所有读这个配置的工具都能复用。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个地址不加 UTM 参数直接用于代码里的 base_url。你需要先去控制台生成 Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 生成后复制那串以sk-开头的字符串后面配置里会用到。这里要区分两个概念Key 是身份凭证API 通道是请求入口。统一 Key 的好处是轮换时只改一处坏处是权限集中所以别把它硬编码进脚本放配置文件里并加进.gitignore。如果你只是临时验证模型输出可以直接用模型对话页面 https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 手动试如果要长期在编辑器或 Agent 里跑编码任务走 Coding Plan 更合适地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。3. 可复制配置settings.json 骨架与 prettytable 脚本先给配置骨架。这个settings.json放在项目根目录结构上分三块凭证、通道、输出偏好。凭证只存 Key 的引用名实际值从环境变量读避免明文落盘。{ taotoken: { api_key_env: TAOTOKEN_API_KEY, base_url: https://taotoken.net/api, default_model: claude-sonnet, timeout_seconds: 60 }, tools: { code_assist: { provider: taotoken, model: claude-sonnet, max_tokens: 4096 }, chat_debug: { provider: taotoken, model: gpt-4o-mini, max_tokens: 2048 } }, output: { table_style: default, align: left, max_col_width: 40 } }字段说明用表格对照更清楚字段作用建议值api_key_env环境变量名脚本运行时读取TAOTOKEN_API_KEYbase_urlAPI 通道入口https://taotoken.net/apidefault_model未指定模型时的兜底按你套餐里可用的填timeout_seconds请求超时避免脚本卡死30 到 60tools.*.provider指向 taotoken 块固定 taotokenoutput.max_col_width表格列宽上限防长文本撑爆40 左右环境变量这样设Linux/macOS 下写进~/.bashrc或~/.zshrcexport TAOTOKEN_API_KEYsk-你的KeyWindows PowerShell 用$env:TAOTOKEN_API_KEYsk-你的Key接下来是读取配置并渲染表格的脚本。核心思路从settings.json拿通道信息用统一 Key 发一个请求把返回的结构化数据塞进 prettytable。#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import os import requests from prettytable import PrettyTable def load_settings(pathsettings.json): with open(path, r, encodingutf-8) as f: return json.load(f) def call_taotoken(settings, prompt): cfg settings[taotoken] api_key os.environ.get(cfg[api_key_env]) if not api_key: raise RuntimeError(f环境变量 {cfg[api_key_env]} 未设置) headers { Authorization: fBearer {api_key}, Content-Type: application/json } payload { model: cfg[default_model], messages: [{role: user, content: prompt}], max_tokens: 512 } resp requests.post( f{cfg[base_url]}/v1/chat/completions, headersheaders, jsonpayload, timeoutcfg[timeout_seconds] ) resp.raise_for_status() return resp.json() def render_table(rows, field_names): tb PrettyTable() tb.field_names field_names for row in rows: tb.add_row(row) tb.align l tb.max_width 40 return tb if __name__ __main__: settings load_settings() result call_taotoken(settings, 用一句话说明 prettytable 的用途) content result[choices][0][message][content] tb render_table( [[taotoken, settings[taotoken][default_model], content[:40]]], [通道, 模型, 返回摘要] ) print(tb)这段脚本里call_taotoken负责请求render_table负责美化两者解耦方便你替换任意数据源。prettytable 的max_width参数很关键长文本不截断会把表格撑得没法看。4. 验证请求跑通一次并检查表格渲染配置写好后先确认依赖装齐pip install prettytable requests然后运行脚本python demo.py预期输出类似------------------------------------------------------------------- | 通道 | 模型 | 返回摘要 | ------------------------------------------------------------------- | taotoken | claude-sonnet | prettytable 用于在终端渲染对齐的 ASCII 表格 | -------------------------------------------------------------------看到这个表格说明三件事都通了环境变量读到了 KeyAPI 通道返回了正常响应prettytable 渲染没报错。如果返回摘要那列被截断调大max_width或缩短content[:40]的切片长度。再补一个从 CSV 渲染的验证动作确认 prettytable 本身工作正常排除是网络问题还是表格问题from prettytable import from_csv with open(sample.csv, r, encodingutf-8) as fp: tb from_csv(fp) print(tb)sample.csv随便写两行name,score,level alice,92,A bob,85,B输出应该是标准的三线表样式。如果这里正常但 API 请求失败问题就在 Key 或通道配置上跟 prettytable 无关。5. 本篇常见错排查报错一KeyError: TAOTOKEN_API_KEY或环境变量为空。说明os.environ.get没取到值。检查是否在同一个终端会话里 export或者是否写进了配置文件但没 source。用echo $TAOTOKEN_API_KEY确认Windows 下用echo $env:TAOTOKEN_API_KEY。报错二401 Unauthorized。Key 本身无效或复制时带了空格。去控制台 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 重新生成一个注意别把换行符也复制进去。另外确认base_url拼出来的路径是https://taotoken.net/api/v1/chat/completions少一段都会 404。报错三ModuleNotFoundError: No module named prettytable。装到了别的 Python 环境。用which python和pip -V对比路径或者直接用python -m pip install prettytable。报错四表格列宽爆炸终端换行错乱。长文本没截断。设置tb.max_width 40或者对单元格内容做textwrap.shorten。另外tb.align l让左对齐数字列可以单独设tb.align[score] r。报错五settings.json读取报JSONDecodeError。多半是尾随逗号或中文引号。用python -m json.tool settings.json校验格式能过就说明语法没问题。报错六请求超时但网络正常。把timeout_seconds调大或者检查是不是模型名写错了导致服务端一直等。模型名以控制台里列出的为准别自己拼。6. 一次配置多工具复用把 Key 收敛到settings.json加环境变量之后你新增工具时只需要在tools块里加一段指向同一个taotoken配置不用再翻凭证。prettytable 这边建议把render_table抽成一个公共函数任何返回列表数据的地方都能直接调终端输出风格就统一了。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有各语言的最小请求示例对照着改base_url和 header 就行。如果你主要跑编码类任务Coding Plan 那条线 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 会更省事配置骨架可以直接复用上面这份。ClaudeCode 相关的接入说明在 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 需要的话按文档把base_url指过去即可。最后留个实用习惯每次改完settings.json先跑一遍 CSV 渲染确认 prettytable 没坏再跑 API 请求确认通道没断两步分开排查比一股脑调试快得多。
返回列表