免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

psutil 与 paramiko 批量运维脚本,Codex 连上 TaoToken 后能跑通 free -m 远程查询

psutil 与 paramiko 批量运维脚本,Codex 连上 TaoToken 后能跑通 free -m 远程查询 从 psutil 采集到 paramiko 远程执行用 Codex 连上 TaoToken 跑通 free -m 验证写运维脚本最怕的不是代码长而是环境依赖多、SSH 参数一多就不知道哪一步断了。本文围绕 psutil 的系统信息采集与 paramiko 的远程命令执行把 Codex 接到 TaoToken 上让模型帮你核对psutil.virtual_memory()、psutil.disk_io_counters()的字段含义修正paramiko.SSHClient().exec_command(free -m)的连接写法并在对话里看到请求成功返回确认 Token 消耗落在有效的脚本排障上。TaoToken 官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end一、原问题与场景本地依赖多SSH 一多就难排查原文的路径是先在本地pip install psutil然后逐个方法试cpu_times()、virtual_memory()、disk_io_counters()、net_io_counters()再进入 paramiko 的SSHClient与SFTPClient。这条路径本身没问题但实际运维里会遇到两类反复出现的麻烦第一类是字段语义对不上。psutil 返回的是 namedtuplemem.total、mem.used、mem.percent、mem.free看起来直观但buffers和cached在 Linux 上的口径、disk_io_counters(perdiskTrue)返回的字典结构、net_io_counters(pernicTrue)的键名在不同内核和 psutil 版本下会有差异。你盯着一个数字不确定它是不是你以为的那个含义。第二类是 paramiko 连接参数一多就难定位。connect()里 hostname、port、username、password、pkey、key_filename、timeout、allow_agent、look_for_keys、compress 十来个参数任何一个写错报错信息往往只给一句Authentication failed或Unable to connect你分不清是密码错、端口错、还是set_missing_host_key_policy没设导致未知主机被拒。这两类问题的共同点是你需要一个能读懂你贴的报错和输出、并给出具体修改建议的执行工具。Codex 通过 TaoToken 拿到模型访问能力后正好承担这个角色——你把free -m的输出或 paramiko 的异常栈贴进去它帮你确认字段、修正写法而不是让你在搜索引擎里翻十几篇口径不一的帖子。二、TaoToken 前置先创建 Key再填 Base URL在动 Codex 之前先到 TaoToken 官网创建 API Key。入口在这里https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end登录后进入控制台在 API Keys 页面新建一个 Key。这个 Key 就是后面 Codex 请求时用的凭证格式形如YOUR_API_KEY。创建完先复制保存页面刷新后不一定还能看到完整值。Codex 侧的接入点Base URL填https://taotoken.net/api注意这里不带任何查询参数就是干净的 API 根地址。Codex 会把请求发到这个 Base URL 下的兼容路径由 TaoToken 转发到对应模型。如果你用的是命令行方式启动 Codex 相关能力TaoToken 也提供了 CLI 工具npm i -g taotoken/taotoken taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m MODEL_ID其中-k是刚创建的 Key-u是 API 地址-m是你要用的模型 ID。这条命令适合在终端里快速起一个带模型能力的会话把 psutil/paramiko 的报错直接贴进去问。需要区分的是TaoToken 提供的是模型访问能力不是替代你的 Python 环境也不是替你执行 SSH。psutil 还是要pip installparamiko 还是要你自己写连接逻辑TaoToken 让 Codex 能读懂你的代码和报错并给出修正建议。三、可复制配置Codex 侧与脚本侧分开写先看 Codex 侧的配置。如果你用的是配置文件方式核心就是 Base URL 和 Key 两项。以常见的 OpenAI 兼容配置为例在 Codex 的配置里指定# Codex 侧配置示意 base_url https://taotoken.net/api api_key YOUR_API_KEY model MODEL_ID如果你走的是环境变量方式对应设置export OPENAI_BASE_URLhttps://taotoken.net/api export OPENAI_API_KEYYOUR_API_KEY具体变量名以你所用 Codex 版本的文档为准关键是 Base URL 指向https://taotoken.net/apiKey 用你创建的那一串。再看脚本侧。原文的 psutil 采集部分保持不变这里给一个可直接跑的片段用来生成待验证的输出import psutil import datetime # CPU print(逻辑核心数:, psutil.cpu_count()) print(物理核心数:, psutil.cpu_count(logicalFalse)) print(用户进程CPU:, psutil.cpu_times().user) # 内存 mem psutil.virtual_memory() print(内存总容量:, mem.total) print(内存已使用:, mem.used) print(内存占用:, mem.percent) print(剩余:, mem.free) print(虚拟内存:, psutil.swap_memory()) # 磁盘 print(磁盘分区:, psutil.disk_partitions()) print(磁盘读写:, psutil.disk_io_counters()) print(每块磁盘读写:, psutil.disk_io_counters(perdiskTrue)) # 网络 print(总网络信息:, psutil.net_io_counters()) print(每块网卡:, psutil.net_io_counters(pernicTrue)) # 其他 print(当前登录用户:, psutil.users()) print(开机时间:, datetime.datetime.fromtimestamp( psutil.boot_time()).strftime(%Y-%m-%d %H:%M:%S))paramiko 远程执行free -m的部分按原文结构整理成可复制版本import paramiko hosts 192.168.112.122 port 22 user root pwd 123123 paramiko.util.log_to_file(system.log) ssh_client paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect( hostnamehosts, portport, usernameuser, passwordpwd, allow_agentFalse, look_for_keysFalse, timeout10 ) stdin, stdout, stderr ssh_client.exec_command(free -m) for line in stdout: print(line, end) err stderr.read().decode() if err: print(STDERR:, err) stdin.close() ssh_client.close()这里比原文多加了look_for_keysFalse和timeout10。前者避免 paramiko 去~/.ssh里找私钥导致认证路径混乱后者避免网络不通时脚本长时间挂起。这两个参数正是 Codex 在排障时经常建议补上的。四、验证请求与成功结果让 Codex 确认字段和连接配置好之后验证分两步。第一步验证 Codex 到 TaoToken 的请求能通。在 Codex 会话里发一句简单的确认比如让它解释psutil.virtual_memory()返回的buffers和cached在 Linux 上的区别。如果模型正常返回内容说明 Base URL 和 Key 都生效了请求成功返回。这一步的意义是确认 Token 消耗在有效对话上而不是卡在认证失败。第二步把脚本的真实输出贴给 Codex。先跑 psutil 那段把disk_io_counters(perdiskTrue)的打印结果贴进去问它每个键对应的物理含义以及read_bytes和read_count的单位。再跑 paramiko 那段如果free -m正常返回你会看到类似total used free shared buff/cache available Mem: 1837 412 198 12 1226 1180 Swap: 2047 0 2047把这个输出贴给 Codex让它对照psutil.virtual_memory()的total、used、free做口径核对。注意free -m的buff/cache和 psutil 的bufferscached不是简单相加关系Codex 能帮你理清这个差异避免你在监控脚本里把两个来源的数字混用。如果 paramiko 报错比如paramiko.ssh_exception.AuthenticationException: Authentication failed.把完整异常栈贴给 Codex同时告诉它你用的connect()参数。它通常会让你先确认allow_agent和look_for_keys是否设成 False再检查密码里是否有特殊字符被 shell 转义。这类排查如果自己翻文档要来回试很多次在 Codex 会话里一轮对话就能定位到具体参数。成功跑通的标志有三个Codex 能正常返回模型内容、psutil 输出字段被解释清楚、paramiko 的free -m输出与预期一致。三个都满足说明这条从 TaoToken 到 Codex 再到运维脚本的链路是通的。五、本篇常见错排查错误一Codex 请求返回 401 或认证失败。先检查 Key 是否复制完整有没有多余空格。再确认 Base URL 是https://taotoken.net/api没有多写路径或参数。如果用的是环境变量确认当前终端会话里变量已生效echo $OPENAI_API_KEY能看到值。错误二paramiko 报Unable to connect to port 22。这通常是网络层问题不是 Codex 或 TaoToken 的问题。先确认目标主机 IP 和端口可达telnet 192.168.112.122 22试一下。如果目标机在云上检查安全组是否放行 22 端口。错误三free -m返回空或只有表头。检查exec_command后是否读了stdout以及是否在close()之前读。paramiko 的 stdout 是文件对象for line in stdout会逐行读但如果命令本身在远程执行失败输出会进stderr。把stderr.read()也打印出来能看到远程 shell 的报错。错误四psutil 的disk_io_counters()返回 None。在某些容器环境或权限受限的情况下磁盘 IO 计数器不可读psutil 会返回 None。这不是脚本写错是环境限制。Codex 会建议你先判断返回值再取字段避免AttributeError。错误五set_missing_host_key_policy没设导致首次连接被拒。默认策略是RejectPolicy首次连接未知主机时会直接拒绝。加上AutoAddPolicy()后未知主机密钥会被自动加入本地 HostKeys。生产环境如果在意安全性可以用WarningPolicy记录告警而不是静默接受。错误六Codex 会话里贴了报错但模型答非所问。把报错栈、你的connect()参数、以及你期望的结果一起贴进去信息越完整模型定位越准。只贴一句Authentication failed任何工具都只能猜。六、语义一致 CTA按你的下一步选入口如果你现在卡在 Key 创建或 Base URL 配置上直接去 API Keys 页面和接入文档对照检查创建与管理 Keyhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你已经配好想先验证模型能不能正常返回、确认 psutil 字段解释是否准确去模型对话页面直接试模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite如果你打算把 Codex 长期用在运维脚本的编写、审查和排障上比如持续维护 psutil 采集逻辑和 paramiko 批量执行模块看 Coding PlanCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite回到本篇的场景psutil 负责采集paramiko 负责远程执行Codex 通过 TaoToken 负责读懂你的输出和报错。三者各司其职Token 消耗落在真实的脚本验证和排障上而不是反复试错。先把free -m这一条远程查询跑通后面的批量运维脚本就有了可复用的验证路径。
返回列表