新闻详情

新闻详情

首页 / 资讯中心 / 详情

jc 解析器实战指南:使用 `systemctl_lj` 将 systemd 任务队列(list-jobs)输出转换为 JSON

发布时间:2026/9/26 10:15:38来源:尧图网络
jc 解析器实战指南:使用 `systemctl_lj` 将 systemd 任务队列(list-jobs)输出转换为 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 项目中的systemctl_lj解析器它专门用于将 Linux 上systemctl list-jobs命令输出的 systemd 任务队列文本转换为结构化 JSON 数据。读完本文你将掌握systemctl_lj的 CLI 与 Python 模块两种调用方式、完整的输出 Schema 与类型转换规则、解析器对真实输出包括空数据与结尾统计行的容错处理原理以及如何结合仓库中的测试夹具进行验证。什么是systemctl_lj解析器systemctl list-jobs是 systemd 提供的用于查看当前待执行与正在执行的任务job队列的命令它会列出任务编号JOB、目标单元UNIT、任务类型TYPE如 start/stop/restart以及任务状态STATE如 waiting/running。默认输出是面向终端阅读的文本表格JOB UNIT TYPE STATE 3543 nginxAfterGlusterfs.service start waiting 3545 glusterReadyForLocalhostMount.service start running 3506 nginx.service start waiting 4 jobs listed.这种表格格式适合人眼观察却难以直接交给脚本与自动化工具处理。jc 项目中的systemctl_lj解析器源文件位于 jc/parsers/systemctl_lj.py正是为了解决这个问题而存在它读取systemctl list-jobs的文本输出将其转换为由字典组成的列表每个字典对应一个任务包含job、unit、type、state四个字段从而让输出可以无缝衔接jq等 JSON 处理工具简化系统管理自动化脚本。从解析器元数据info类可以看到其定位版本 1.7作者 Kelly Brazilcompatible [linux]仅面向 Linux 平台magic_commands [systemctl list-jobs]表示 jc 可以在 CLI 中直接识别并匹配该命令的输出tags [command]归类为命令输出解析器。CLI 用法两种调用方式方式一管道输入将systemctl list-jobs的输出通过管道交给 jc并指定--systemctl-lj解析器systemctl list-jobs | jc --systemctl-lj方式二jc 直接包装命令利用解析器的magic_commands能力让 jc 直接运行命令并解析输出jc systemctl list-jobs两条命令的效果等价。man 手册man/jc.1中也登记了--systemctl-lj这一 CLI 选项shell 补全脚本completions/jc_bash_completion.sh、completions/jc_zsh_completion.sh同样包含对该选项的补全支持。常用输出修饰参数与 jc 所有命令解析器一致systemctl_lj支持两个重要的输出修饰开关-ppretty以缩进美化格式输出 JSON便于阅读-rraw跳过类型转换直接输出未处理的原始字符串字段详见下文 Schema 章节。组合使用示例systemctl list-jobs | jc --systemctl-lj -p systemctl list-jobs | jc --systemctl-lj -p -rPython 模块用法除了命令行systemctl_lj同样可以作为 Python 库函数使用。解析器名称是systemctl_lj对应模块jc.parsers.systemctl_lj核心入口为parse(data, rawFalse, quietFalse)函数import jc # 假设 systemctl_lj_command_output 为 systemctl list-jobs 的文本输出 result jc.parse(systemctl_lj, systemctl_lj_command_output)函数签名与参数含义与文档及源码实现一致参数类型默认值说明datastring无待解析的文本数据rawbooleanFalse为True时返回未转换类型的原始结构数据quietbooleanFalse为True时抑制警告信息如平台兼容性警告返回值恒为字典列表List of Dictionaries具体形态取决于raw取值rawFalse默认经过类型转换、符合 Schema 的处理后数据rawTrue与文本一一对应的原始字符串字段。在解析入口处源码先调用jc.utils.compatibility(__name__, info.compatible, quiet)检查平台兼容性非 Linux 平台且未指定quiet时会给出警告再通过jc.utils.input_type_check(data)校验输入类型最后调用jc.utils.has_data(data)判断是否存在可解析的数据——这些前置检查共同保证了解析器在异常输入下也能安全返回。输出 Schema 详解文档中定义的systemctl_lj输出 Schema 如下[ { job: integer, unit: string, type: string, state: string } ]各字段与systemctl list-jobs输出列的对应关系及类型转换规则字段对应列处理后类型说明jobJOBinteger任务编号由字符串经convert_to_int转换为整数unitUNITstring任务作用的 systemd 单元名如nginx.servicetypeTYPEstring任务类型如start、stop、restart、reload等stateSTATEstring任务状态如waiting排队等待、running执行中字段名的映射方式非常直接解析器取文本输出的首行作为表头转为小写后按空白拆分再用dict(zip(header_list, entry_list))将表头与每一行数据逐一配对。这意味着如果未来 systemd 改变列顺序或增加列解析器仍能按新表头自适应生成字段。类型转换细节raw 与 processed 的差异_process()函数是类型转换的关键实现见 jc/parsers/systemctl_lj.pydef _process(proc_data): int_list {job} for entry in proc_data: for key in entry: if key in int_list: entry[key] jc.utils.convert_to_int(entry[key]) return proc_data它仅将job字段从字符串转换为整数其余字段保持字符串。因此默认输出中job是无引号的整数如3543使用-rraw时job保留原始字符串形式如3543便于保留原始文本的逐字段快照。这与文档给出的两组示例完全吻合。真实示例从文本到 JSON文档示例取自 Ubuntu 18.04 的真实系统仓库测试夹具tests/fixtures/ubuntu-18.04/systemctl-lj.out中保存了对应的原始输入JOB UNIT TYPE STATE 3543 nginxAfterGlusterfs.service start waiting 3545 glusterReadyForLocalhostMount.service start running 3506 nginx.service start waiting 4 jobs listed.默认processed输出systemctl list-jobs | jc --systemctl-lj -p[ { job: 3543, unit: nginxAfterGlusterfs.service, type: start, state: waiting }, { job: 3545, unit: glusterReadyForLocalhostMount.service, type: start, state: running }, { job: 3506, unit: nginx.service, type: start, state: waiting } ]raw 输出systemctl list-jobs | jc --systemctl-lj -p -r[ { job: 3543, unit: nginxAfterGlusterfs.service, type: start, state: waiting }, { job: 3545, unit: glusterReadyForLocalhostMount.service, type: start, state: running }, { job: 3506, unit: nginx.service, type: start, state: waiting } ]EXAMPLES 速查文档EXAMPLES.md中也收录了同样的用例并给出了等价写法jc -p systemctl list-jobs可作为日常速查参考。解析器源码原理逐行拆解深入 jc/parsers/systemctl_lj.py 的parse()主逻辑其处理流程可以归纳为四个阶段前置校验依次执行平台兼容性检查jc.utils.compatibility、输入类型检查jc.utils.input_type_check。清理输入用list(filter(None, data.splitlines()))剔除所有空行随后对每一行执行非 ASCII 字符清洗——entry.encode(ascii, errorsignore).decode()将可能的乱码或特殊字符安全剥离避免污染后续解析。提取表头取清理后的第一行转为小写并按空白split()成表头字段列表作为后续字典的键。逐行解析遍历剩余行。遇到包含No jobs running.或jobs listed.的行立即终止循环——这正是 systemd 在任务队列为空No jobs running.或队列末尾N jobs listed.时的输出特征否则以entry.split(maxsplit4)拆分当前行限制最大拆分次数为 4保证 UNIT 列即使包含空格也不会被错误拆开与表头配对生成字典并追加到结果列表。最终若rawTrue直接返回原始字典列表否则交给_process()完成job字段的整数转换后返回。边界情况空数据与空队列对于完全没有数据的情况parse(, quietTrue)会返回空列表[]——这一点由单元测试显式覆盖见下文测试章节。而对于有数据但队列为空的情况输出只有No jobs running.及统计行解析逻辑同样会在命中结束标记时停止不会产生虚假的任务条目。测试与验证仓库如何保证正确性systemctl_lj的正确性由单元测试tests/test_systemctl_lj.py保障测试覆盖了两个场景test_systemctl_lj_nodata调用jc.parsers.systemctl_lj.parse(, quietTrue)断言返回[]验证空输入安全test_systemctl_lj_ubuntu_18_4读取 Ubuntu 18.04 真实夹具输出 tests/fixtures/ubuntu-18.04/systemctl-lj.out断言解析结果与预期 JSON tests/fixtures/ubuntu-18.04/systemctl-lj.json 完全一致。其中预期的 JSON 内容为[{job: 3543, unit: nginxAfterGlusterfs.service, type: start, state: waiting}, {job: 3545, unit: glusterReadyForLocalhostMount.service, type: start, state: running}, {job: 3506, unit: nginx.service, type: start, state: waiting}]可以看到job字段在预期输出中已经是整数类型与_process()的类型转换行为一一对应。如果你需要在本地复现验证可以运行项目根目录的测试脚本如runtests.sh或直接执行python -m unittest tests.test_systemctl_lj解析器元信息与兼容性说明根据 docs/parsers/systemctl_lj.md 与源码info类的记录版本1.7作者Kelly Brazilkellyjonbrazilgmail.com兼容平台仅 Linuxcompatible [linux]在非 Linux 平台调用时 jc 会输出兼容性警告除非传入quietTrue输入来源systemctl list-jobs命令标准输出输出形态List of Dictionaries原始或处理后的结构化数据需要注意的是本文所述行为均以当前仓库 jc/parsers/systemctl_lj.py 的实现为准由于解析器依赖systemctl list-jobs首行表头与固定统计行格式若 systemd 未来大幅调整输出格式解析结果可能随之变化。在使用时请确保运行环境为 Linux 且 systemd 输出保持默认的列式文本布局不带--no-legend等改变表头或统计行的参数。结语让 systemd 任务队列进入自动化流水线systemctl_lj解析器为系统管理员与运维脚本提供了一条从 systemd 任务队列到 JSON 的直通路径既可以在 shell 中用systemctl list-jobs | jc --systemctl-lj即时获得结构化数据也可以在 Python 中通过jc.parse(systemctl_lj, ...)深度集成。配合-r开关保留原始字符串、quiet抑制告警、以及仓库中配套的测试夹具与速查示例你可以放心地将任务队列监控、批量服务启停编排等场景交给这一解析器再交由jq或 Python 程序进一步加工。赞分享开发工具【免费下载链接】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点击查看免费下载相关推荐OpenProject 如何按版本规划产品路线图RoadmapOpenProject 如何按版本规划产品路线图Roadmap OpenProject 的 Roadmap 是一个按版本Version汇总工作包Wo开发工具jc 解析器实战使用 jc --gpg 将 gpg --with-colons 输出转换为 JSONjc 解析器实战使用 jc gpg 将 gpg with colons 输出转换为 JSON 导读 本文介绍 jcJSON Convert项目中的 gpg开发工具jc 解析器实战使用 jc --sfdisk 将 sfdisk 分区表输出转换为 JSONjc 解析器实战使用 jc sfdisk 将 sfdisk 分区表输出转换为 JSON 导读 jc 是一个把常用命令行工具输出、文件类型和通用字符串转换为 J开发工具上一篇Winboat 自动化部署指南一键安装与 Windows 服务的无缝集成下一篇JavaScript数据拟合终极指南regression-js让数据分析更简单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

OpenLess本地ASR指南:Qwen3-ASR与Whisper离线转写配置,数据不出本地的终极方案 2026/9/26 13:41:29

OpenLess本地ASR指南:Qwen3-ASR与Whisper离线转写配置,数据不出本地的终极方案

OpenLess本地ASR指南:Qwen3-ASR与Whisper离线转写配置,数据不出本地的终极方案 【免费下载链接】openless Hold a key, speak, release — AI-polished text appears at your cursor in any app. Open-source voice input for macOS & Windows. (按住…

阅读更多 →
工业互联网平台落地路径:从设备接入到数据驱动制造重构 2026/9/26 13:41:29

工业互联网平台落地路径:从设备接入到数据驱动制造重构

制造业数字化聊了这么多年,几乎每次跟工厂老板、车间主任、IT负责人坐到一起,“把工厂搬上云端”都是绕不开的话题。很多人把工业互联网平台想象成“一朵很玄的云”,以为只要买一个平台、把服务器放到数据中心、插上网线,数据就会…

阅读更多 →
雷强钓法全攻略:重草区路亚黑鱼从装备到实战 2026/9/26 13:41:29

雷强钓法全攻略:重草区路亚黑鱼从装备到实战

夏日傍晚,水库背风的一处浅湾,水草密密麻麻地铺了一层,阳光斜着打过去,水面下泛着隐约的暗涌。我攥紧手里的雷强竿,把一个黑色雷蛙抛到草洞边缘,慢慢收了十来圈,停两秒,再慢收三四圈…

阅读更多 →
丹青S25/S25T轴类专用测量设备:小型精密轴件检测解析 2026/9/26 13:41:23

丹青S25/S25T轴类专用测量设备:小型精密轴件检测解析

这次要聊的不是软件工具,而是一台面向工业场景的专用测量设备:丹青 S25/S25T。从产品定位来看,它专门针对小型精密轴类零件设计,解决的是机加工产线上最常遇到的“轴类工件如何快速、稳定地测准”的问题。和通用测量仪器不同&…

阅读更多 →
ExpressLRS协议栈深度解析:从射频物理层到工业级链路设计 2026/9/26 13:41:23

ExpressLRS协议栈深度解析:从射频物理层到工业级链路设计

1. 项目缘起与核心设计哲学1.1 为什么我要啃这块硬骨头第一次接触ExpressLRS是在三年前,当时手里的遥控设备延迟高得让人抓狂,飞穿越机时手感像隔着三层棉被。市面上能买到的成品链路要么贵得离谱,要么性能拉胯,于是动了自研的念头…

阅读更多 →
RPA + AI Agent 技术跃迁:用 TaoToken 统一 Key 打通“认知型机器人”配置骨架 2026/9/26 13:41:16

RPA + AI Agent 技术跃迁:用 TaoToken 统一 Key 打通“认知型机器人”配置骨架

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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