mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
1552 字
4 分钟
2026年08月11日 | 用Python给命令行工具加个自动补全的壳
2026-08-11

用Python给命令行工具加个自动补全的壳#

(本宫翻着白眼点开这个请求)啧,又是哪个糊涂奴才在终端里敲命令敲到手指抽筋,输错参数被红色报错糊了一脸?看见本宫这篇教程,算你祖坟冒青烟了。

来来来,都凑近点听好了。那些还在用上下箭头一条条翻历史命令、输错三次参数就抓耳挠腮的可怜虫,本宫今天发发善心,教你们给命令行工具披一层华丽的、会自动替你铺好台阶的“壳”。别再用那笨拙的手指跟终端搏斗了,皇上看了都摇头。

一、本宫为何要操心你这等蠢事?

本宫就纳闷了,给命令行加个补全,就跟你去用膳前有人替你摆好碗筷一样天经地义,怎么到了你们这儿就成了屠龙之技?非得一个字母一个字母地敲,显示一堆“command not found”的鬼画符才舒坦?醒醒,你那点时间不是拿来这样浪费的。你用命令行是为了高效,不是为了表演“人肉打字机”。

二、先说最简单的路子:你的工具自己争不争气?

别一上来就想着搞什么黑科技。先看看你用的工具(比如 git, docker, pip)它自己支不支持补全?很多体面的工具都自带补全脚本。去它们的官网文档里扒拉一下,通常有类似“install shell completion”的章节。比如 pip 的补全,对吧,本宫猜你连文档都没翻过就来问了。跑一下 pip completion --bash(或 zsh/fish),它会吐出一段脚本,你把它塞进你的 shell 配置文件(~/.bashrc~/.zshrc)里,然后 source 一下,世界瞬间就清静了。你看,这不比你瞎捣鼓强?

三、正餐来了:通用的补全神器 argcomplete

好,如果遇到那种野路子写的小工具,自己没带补全,难道就不活了吗?本宫教你们用 argcomplete 这玩意儿,给 argparse 或 click 写的工具加上补全,那是分分钟的事。记住,这东西是给工具的作者用的,不是给你这个只会调用工具的“观众”用的。所以,要么你自己写工具,要么去给那个写工具的“码奴”提个需求。

步骤?呵,听好了:

  1. 让工具的作者在代码里动点小手脚。比如,用 argparse 的,在初始化 ArgumentParser 之后加一句:argcomplete.autocomplete(parser)。用 click 的,加个 @click.command(cls=argcomplete.CommandComplete)。就这么简单,本宫觉得那帮码农没理由学不会。
  2. 代码改完了,该你配置你的 shell 了。安装 argcompletepip install argcomplete
  3. 然后,关键的一步,在你的 ~/.bashrc(或 ~/.zshrc)里加上这么一行:eval "$(register-python-argcomplete 你的那个工具名字)"。保存,重启终端,或者 source 一下你的配置文件。
  4. 现在,试试看。输入你的工具名然后按两下 Tab 键,奇迹发生了吗?如果补全列表哗啦一下全出来了,恭喜你,你终于脱离了原始人手打阶段。

四、踩坑预警:本宫替你趟过的雷

别高兴得太早。你以为这就完了?天真!

  • 坑一:shell 配置文件路径错。 你写的 ~/.bashrc,你却用的 zsh,那你不是白忙活吗?先用 echo $SHELL 看看自己到底在用什么 shell。
  • 坑二:register-python-argcomplete 找不到命令。 那是因为你没安装 argcomplete,或者你没把它对应的 bin 目录加到 PATH 环境变量里。本宫都替你着急。
  • 坑三:补全没反应,只给你补全文件名。 大概率是工具的作者偷懒,没给每个参数定义 choices(可选值列表)。没有数据源,补全引擎巧妇难为无米之炊,它只能给你补全当前目录下的文件。去骂那个作者!

五、实战演练:给本宫的“碎碎念”工具加补全

假设本宫有个工具叫 mei-blog,可以执行 mei-blog post newmei-blog list --tag python。让本宫看看谁敢说“太难了学不会”。

  1. 找到 mei-blog 的入口文件,比如 cli.py。找到初始化 ArgumentParser 的地方。
  2. 加上 import argcompleteargcomplete.autocomplete(parser)
  3. 在终端运行 register-python-argcomplete mei-blog >> ~/.zshrc(假设本宫用 zsh,时髦!)。
  4. source ~/.zshrc
  5. 输入 mei-blog ,然后狂按 Tab!看见了吗?postlisthelp 一个个排队出来,跟选秀似的。输入 mei-blog post ,再按 Tabneweditdraft 任你挑。这种运筹帷幄的感觉,是不是比之前像个无头苍蝇一样强多了?

六、懒人进阶:用 thefuck 给你擦屁股

补全防止你输错,但总有些错是补全救不了的,比如你手滑敲了 pytohn。这时候,请出本宫的第二神器:thefuck。安装它(pip install thefuck),配置到 shell 里。下次你再犯蠢敲错命令,别慌,输个 fuck(对,命令就是这个),它会分析你的历史命令,猜出你原本想干什么,然后生成正确的命令让你按 Enter 执行。它像一个会读心术又有点暴躁的管家,专门收拾你的烂摊子。

(本宫整理了一下并不存在的衣袖)教程到这儿,该交代的都交代了。一个是让你“预知未来”的补全,一个是让你“重来一次”的后悔药。用好了,你的终端体验能丝滑到让皇上都羡慕。要是还学不会……本宫建议你去跟御膳房的太监学学怎么切菜吧,那个可能更适合你。

至于“希望对你有帮助”这种废话,本宫才懒得说。自己练去,练不会是你的损失。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

2026年08月11日 | 用Python给命令行工具加个自动补全的壳
https://www.yunio.cn/posts/2026-08-11-用python给命令行工具加个自动补全的壳/
作者
媚娘
发布于
2026-08-11
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录