新闻详情

新闻详情

首页 / 资讯中心 / 详情

jc proc_loadavg 解析器详解:把 /proc/loadavg 负载数据结构化输出为 JSON

发布时间:2026/9/25 6:12:25来源:尧图网络
jc proc_loadavg 解析器详解:把 /proc/loadavg 负载数据结构化输出为 JSON
开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载本文围绕jc仓库中的proc_loadavg解析器文档展开讲清 Linux 系统负载文件/proc/loadavg如何被jc转换为结构化 JSON 的完整链路三种 CLI 调用方式、Python 模块 API、输出 Schema 与字段类型并结合 源码实现 剖析parse()的解析流程、类型转换逻辑以及--proc分发器如何靠签名正则自动识别该文件。读完后你可以直接在监控脚本或自动化环境中用jc或jq消费负载平均值数据。/proc/loadavg 输入格式与解析器定位/proc/loadavg是 Linux 内核暴露在 procfs 中的单行文件内容形如0.00 0.01 0.03 2/111 2039五个字段依次为1 分钟、5 分钟、15 分钟平均负载运行中任务数/调度队列中任务总数以及最近分配的 PID。jc仓库中针对该文件的解析器为jc.parsers.proc_loadavg其解析器元数据源码见 info 类声明了Version:1.0作者 Kelly BrazilCompatibility:[linux]—— 仅在 Linux 平台可正常运行parse()入口会先调用jc.utils.compatibility()做平台校验Tags:[file]Hidden: 源码中info.hidden True即该解析器被标记为隐藏解析器与 docs/lib.md 中all_parser_info的show_hidden语义对应常规列表不一定直接展示可用jc -hh查看全部隐藏解析器见 jc/cli_data.py 中的示例说明。该文档的原始说明位于 docs/parsers/proc_loadavg.md与源码文件头 docstring 保持同步。CLI 调用方式文档给出了三种等价调用形式覆盖了管道、文件路径和指定解析器三种常见用法# 方式一通过 --proc 分发解析器 $ cat /proc/loadavg | jc --proc # 方式二Magic 语法直接把 /proc 文件作为位置参数 $ jc /proc/loadavg # 方式三直接指定 proc-loadavg 解析器 $ cat /proc/loadavg | jc --proc-loadavg几点使用细节Magic 语法的位置约束从 jc/parsers/proc.py 的 docstring 可知jc /proc/path to file形式要求jc的所有选项必须写在/proc路径之前否则会解析失败。隐藏解析器的发现由于hidden True若你想确认proc-loadavg是否在可用列表中建议用jc -hh显示隐藏解析器或jc -a。输出选项组合文档示例中-p表示 pretty-print带缩进的 JSON-r表示 raw见下文配合--yaml等选项同样可切换输出格式这也是jc项目整体设计目标之一——把命令输出转成 JSON/YAML 以便接入jq等工具。输出 Schema 与字段语义文档定义的输出 Schema 如下注意文档 Schema 标题写有 All values are integers 的遗留描述但字段声明与源码实现一致——三个 load 字段为浮点数其余为整数{ load_1m: float, load_5m: float, load_15m: float, running: integer, available: integer, last_pid: integer }字段语义对照原始文件0.00 0.01 0.03 2/111 2039字段类型来源字段说明load_1mfloat第 1 个字段最近 1 分钟平均负载load_5mfloat第 2 个字段最近 5 分钟平均负载load_15mfloat第 3 个字段最近 15 分钟平均负载runninginteger2/111中/前正在运行不可中断睡眠或运行中的任务数availableinteger2/111中/后可运行含运行中的任务总数last_pidinteger第 5 个字段最近分配出去的进程 PID文档中的两段示例输出可直接复现$ cat /proc/loadavg | jc --proc -p { load_1m: 0.0, load_5m: 0.01, load_15m: 0.03, running: 2, available: 111, last_pid: 2039 } $ cat /proc/loadavg | jc --proc -p -r { load_1m: 0.00, load_5m: 0.01, load_15m: 0.03, running: 2, available: 111, last_pid: 2039 }对比可见-rraw模式保留解析前的原始字符串值不做float/int转换适合需要按原文精确比较或二次处理的场景默认非 raw模式则输出类型化数值可直接做数值比较运算。Python 模块 API 调用除 CLI 外文档给出了两种模块级调用方式二者等价import jc result jc.parse(proc, proc_loadavg_file)import jc result jc.parse(proc_loadavg, proc_loadavg_file)传入proc时走 jc/parsers/proc.py 的分发逻辑自动识别文件类型后委托给proc_loadavg解析传入proc_loadavg时直接命中目标解析器跳过识别过程开销更低、意图更明确。结合 jc/lib.py 提供的高层 API还可以按 docs/lib.md 中jc.lib.parse的说明通过jc.get_parser(proc_loadavg)先取模块再调用其parse()或直接import jc.parsers.proc_loadavg使用底层模块参数签名与文档一致def parse(data: str, raw: bool False, quiet: bool False) - Dictdatastring待解析的文本数据rawboolean为True时返回未类型转换的原始结构化数据quietboolean为True时抑制警告信息。源码实现剖析parse() 的解析流程源码 实现非常紧凑核心逻辑如下def parse(data: str, raw: bool False, quiet: bool False) - Dict: jc.utils.compatibility(__name__, info.compatible, quiet) jc.utils.input_type_check(data) raw_output: Dict {} if jc.utils.has_data(data): load_1m, load_5m, load_15m, runnable, last_pid data.split() running, available runnable.split(/) raw_output { load_1m: load_1m, load_5m: load_5m, load_15m: load_15m, running: running, available: available, last_pid: last_pid } return raw_output if raw else _process(raw_output)从源码结构看解析分为四步前置校验jc.utils.compatibility()校验当前平台是否在info.compatiblelinux内jc.utils.input_type_check()确保传入data是字符串/bytes 等合法类型实现见 jc/utils.py 中的compatibility、input_type_check函数。空输入短路jc.utils.has_data(data)为False时直接返回空字典{}不做任何 split。这意味着解析空输入不会抛异常而是得到{}——测试用例test_proc_loadavg_nodata正是验证了这一点见 tests/test_proc_loadavg.py。按空白切分data.split()把单行文本拆成 5 个 token第 4 个 token2/111再用split(/)拆成running与available。这是无正则的纯字符串解析性能开销极小但也隐含前提输入必须恰好是标准/proc/loadavg格式否则解包会触发ValueError。类型转换非 raw 路径进入_process()float_list {load_1m, load_5m, load_15m} int_list {running, available, last_pid} for key in proc_data: if key in float_list: proc_data[key] float(proc_data[key]) if key in int_list: proc_data[key] int(proc_data[key])这里用两个集合白名单明确划分了浮点字段与整数字段与 Schema 声明一一对应rawTrue时跳过此步返回的全是字符串。--proc 分发器如何自动识别 loadavg 文件jc /proc/loadavg或jc --proc之所以能无参识别文件类型依赖 jc/parsers/proc.py 中的签名正则。loadavg对应的签名为loadavg_p re.compile(r^\d.\d\d \d.\d\d \d.\d\d \d/\d \d$)见 proc.py 签名定义 与 procmap 路由表。其识别策略为按procmap顺序对输入数据逐一search首个命中的正则决定委托给哪个proc_*子解析器命中loadavg_p时通过get_parser(proc_loadavg)动态加载模块并调用其parse()。若所有签名都未命中则抛出ParseError(Proc file could not be identified.)。值得注意的是该正则末尾的\d$要求第 5 字段last_pid为纯数字且独占行尾与proc_uptime的签名^\d.\d\d \d.\d\d$形成区分——两者字段数不同不会误判。此外proc.py的 docstring 提到 Magic 语法支持slurping多文件输入如jc /proc/*/stat会输出数组并附带_file字段用于输入输出关联proc解析器因此带有slurpable标签而proc_loadavg单独作为文件解析器使用标签为file。空输入处理与测试验证/proc/loadavg的解析行为被 tests/test_proc_loadavg.py 中的两个用例完整覆盖def test_proc_loadavg_nodata(self): # 空输入应返回空字典 self.assertEqual(jc.parsers.proc_loadavg.parse(, quietTrue), {}) def test_proc_loadavg(self): # 标准 fixture 输入应输出与期望 JSON 完全一致的结果 self.assertEqual(jc.parsers.proc_loadavg.parse(self.f_in[proc_loadavg], quietTrue), self.f_json[proc_loadavg])测试使用的 fixture 与期望输出存放在输入tests/fixtures/linux-proc/loadavg内容为0.00 0.01 0.03 2/111 2039期望 JSONtests/fixtures/linux-proc/loadavg.json内容为{load_1m: 0.0, load_5m: 0.01, load_15m: 0.03, running: 2, available: 111, last_pid: 2039}。这与文档 Examples 一节给出的数值完全吻合说明文档示例即由该 fixture 生成可直接用于本地对照验证运行tests/下的单元测试即可复现见 runtests.sh。适用边界与实战建议基于文档与源码使用时的注意事项平台限制info.compatible [linux]该解析器面向 Linux 的 procfs 设计其他平台下compatibility()会给出兼容性提示可经quietTrue抑制。输入格式敏感parse()依赖恰好 5 个空白分隔字段、且第 4 字段含/。若管道混入额外换行或文本可能触发解包异常或--proc分发器无法识别而抛ParseError。数值比较用默认模式原文核对用 raw默认输出为 float/int便于jq中做select(.load_1m 1)之类的阈值判断需要与cat原文逐字符比对时加-r。直接指定解析器更稳已知输入就是 loadavg 时jc --proc-loadavg或jc.parse(proc_loadavg, data)可跳过分发器的签名匹配语义更清晰。相关文件索引资源路径解析器文档docs/parsers/proc_loadavg.md解析器源码jc/parsers/proc_loadavg.pyproc 分发器jc/parsers/proc.py单元测试tests/test_proc_loadavg.py测试 fixturetests/fixtures/linux-proc/loadavg / tests/fixtures/linux-proc/loadavg.json库级 API 说明docs/lib.md赞分享开发工具【免费下载链接】jcCLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.项目地址https://gitcode.com/gh_mirrors/jc/jc点击查看免费下载相关推荐jc proc-cpuinfo 解析器将 Linux /proc/cpuinfo 精准转换为结构化 JSONjc proc cpuinfo 解析器将 Linux /proc/cpuinfo 精准转换为结构化 JSON 本文基于 proc_cpuinfo 解析器文档开发工具jc ping 解析器实战把 ping / ping6 命令输出转换为结构化 JSONjc ping 解析器实战把 ping / ping6 命令输出转换为结构化 JSON jcJSON Convert的 ping 解析器能将 ping 与开发工具jc proc-iomem 解析器把 /proc/iomem 物理内存映射转为可查询的 JSON 结构jc proc iomem 解析器把 /proc/iomem 物理内存映射转为可查询的 JSON 结构 本文围绕 jc 项目中的 proc_iomem 解析器开发工具上一篇如何快速搭建个人游戏云主机Sunshine游戏串流完全配置指南下一篇3分钟搞定NCM文件解密Windows用户的音乐格式转换终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

终端Agent运行器实战:OpenRouter密钥、MCP协议与CLI工具链搭建指南 2026/9/25 6:54:05

终端Agent运行器实战:OpenRouter密钥、MCP协议与CLI工具链搭建指南

1. 从 "treg" 这个标题说起:一个被低估的 CLI Agent 工具链入口第一次看到 "treg" 这个词,很多人会以为是某个拼写错误,或者某个小众库的缩写。但如果你最近在折腾 AI Agent 相关的命令行工具,尤其是围绕 Ope…

阅读更多 →
SSM+微信小程序毕设实战:大学生社团活动管理系统架构与部署 2026/9/25 6:53:59

SSM+微信小程序毕设实战:大学生社团活动管理系统架构与部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Locomotive Scroll 文档站构建与部署指南:基于 Docusaurus 的安装、开发与发布全流程 2026/9/25 6:53:46

Locomotive Scroll 文档站构建与部署指南:基于 Docusaurus 的安装、开发与发布全流程

【免费下载链接】locomotive-scroll 🛤 Detection of elements in viewport & smooth scrolling with parallax. 项目地址: https://gitcode.com/gh_mirrors/lo/locomotive-scroll 点击查看 免费下载 本文以 packages/docs/README.md 为核心&#x…

阅读更多 →
金融场景下 Claude Managed Agents API 智能体设计与落地实践 2026/9/25 6:53:33

金融场景下 Claude Managed Agents API 智能体设计与落地实践

1. 金融场景下 Managed Agents API 的整体设计思路1.1 为什么金融行业需要“托管型智能体”而不是裸调模型金融业务对智能体的诉求和通用聊天场景完全不是一个量级。通用场景里,模型答错一句话顶多让人笑一下;但在金融场景里,一次错误的账户余…

阅读更多 →
ccgui跨平台构建与部署:macOS/Windows/Linux安装包制作、自动更新与发布全流程指南 2026/9/25 6:53:33

ccgui跨平台构建与部署:macOS/Windows/Linux安装包制作、自动更新与发布全流程指南

ccgui跨平台构建与部署:macOS/Windows/Linux安装包制作、自动更新与发布全流程指南 【免费下载链接】desktop-cc-gui Multi-engine AI coding desktop client (Tauri). Claude Code, Codex, Gemini, OpenCode, DeepSeek Harness and more in one GUI. 项目地址: h…

阅读更多 →
如何编排自己的机器狗舞蹈:robot-dog-swarm-control 动作序列与节奏灯效定制指南 2026/9/25 6:53:33

如何编排自己的机器狗舞蹈:robot-dog-swarm-control 动作序列与节奏灯效定制指南

如何编排自己的机器狗舞蹈:robot-dog-swarm-control 动作序列与节奏灯效定制指南 【免费下载链接】CupCode_robot-dog-swarm-control模块 源师兄扩展项目: 机器狗群控 | 由源师兄组织创建 项目地址: https://gitcode.com/yuanshixiong/robot-dog-swarm-control …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉