多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

howdoi 命令行使用指南:参数、环境变量与工作原理全解析

howdoi 命令行使用指南:参数、环境变量与工作原理全解析 开发工具CLI【免费下载链接】howdoiinstant coding answers via the command line项目地址https://gitcode.com/gh_mirrors/ho/howdoi点击查看免费下载本篇指南以 howdoi 项目官方使用文档 docs/usage.md 为主体结合仓库源码与测试用例系统讲解 howdoi 的入门用法、全部命令行参数、环境变量配置及其背后的实现原理。读完本文你将能够熟练使用howdoi在命令行中即时获取编程问题答案并能利用-p/-n/-a/-l/-j等参数精确控制输出通过环境变量调整搜索引擎、缓存、SSL 与问答来源站点。从第一行命令开始howdoi 的定位是instant coding answers via the command line——在终端里直接提问并得到答案无需打开浏览器。安装完成后pip install howdoi或通过 Homebrewbrew install howdoi第一条建议尝试的命令就是询问 howdoi 本身怎么用$ howdoi howdoi这个查询会被 howdoi 识别为帮助类查询。从源码看howdoi内置了一组帮助查询关键词SUPPORTED_HELP_QUERIES包含use howdoi、howdoi、run howdoi、setup howdoi、do howdoi、howdoi use howdoi等见 howdoi/howdoi.py一旦匹配便会直接返回一页常用 howdoi 命令提示而不是发起网络搜索。对应逻辑位于_is_help_query与_get_help_instructionshowdoi/howdoi.py测试用例test_help_queries也验证了这一行为见 test_howdoi.py。查看帮助与参数总览想进一步了解所有可用的标志flags和环境变量随时执行$ howdoi -h该命令由argparse解析器生成见get_parser()howdoi/howdoi.py。-h输出的完整参数如下usage: howdoi [-h] [-p POS] [-n NUM] [-a] [-l] [-c] [-x] [-C] [-j] [-v] [-e [ENGINE]] [--save] [--view] [--remove] [--empty] [QUERY ...] instant coding answers via the command line positional arguments: QUERY the question to answer optional arguments: -h, --help show this help message and exit -p POS, --pos POS select answer in specified position (default: 1) -n NUM, --num NUM number of answers to return (default: 1) -a, --all display the full text of the answer -l, --link display only the answer link -c, --color enable colorized output -x, --explain explain how answer was chosen -C, --clear-cache clear the cache -j, --json return answers in raw json format -v, --version display the current version of howdoi -e [ENGINE], --engine [ENGINE] search engine for this query (google, bing, duckduckgo) --save, --stash stash a howdoi answer --view view your stash --remove remove an entry in your stash --empty empty your stash environment variable examples: HOWDOI_COLORIZE1 HOWDOI_DISABLE_CACHE1 HOWDOI_DISABLE_SSL1 HOWDOI_SEARCH_ENGINEgoogle HOWDOI_URLserverfault.com常用查询与输出控制参数基础查询QUERY位置参数QUERY就是要提问的自然语言问题多个单词之间以空格分隔末尾的问号会被自动剥离——howdoi()中执行了args[query] .join(args[query]).replace(?, )见 howdoi/howdoi.py。例如$ howdoi format date bash DATEdate %Y-%m-%d $ howdoi print stack trace python import traceback try: 1/0 except: print traceback traceback.print_exc() print end of traceback traceback.print_exc()-p / --pos选择第几个答案指定返回搜索结果的第几个答案默认值为1。注意该参数接受范围被限制在1~20之间——IntRange(1, 20)见 howdoi/howdoi.py 与 howdoi/howdoi.py。传入负数或大于 20 的值会直接抛出argparse.ArgumentTypeError并退出测试用例test_negative_and_high_positive_int_values_rejected专门验证了这一点见 test_howdoi.py。如果请求的位置超出结果数量get_link_at_pos会回退到最后一个链接howdoi/howdoi.py。-n / --num一次返回多个答案指定一次返回多少个答案默认1取值范围同样被限制在1~20。与-p组合使用可以从指定位置开始连续取多个答案_get_answers中initial_pos args[pos] - 1然后切片question_links[initial_pos:initial_pos num_answers]见 howdoi/howdoi.py。当返回多个答案时每个答案前会带上★ Answer from 链接 ★的分隔头ANSWER_HEADERhowdoi/howdoi.py。-a / --all显示答案全文默认情况下howdoi 只提取答案中第一个pre或code代码块返回如果答案中没有任何代码块则回退为返回整个正文。加上-a后则输出该答案正文中的全部内容逐段遍历正文子元素代码块经过语法高亮格式化——这段逻辑在_get_answer中实现见 howdoi/howdoi.py。-l / --link只显示答案链接只输出答案对应的 Stack Overflow 页面链接不输出答案正文。实现上_format_answers在args[link]为真时直接用answer[link]替换正文howdoi/howdoi.py测试test_answer_links_using_l_option用正则验证了返回结果形如http(s)://.../questions/数字/...见 test_howdoi.py。-c / --color彩色输出为输出的代码加上语法高亮。底层使用 Pygments 的get_lexer_by_name根据查询关键词或 Stack Overflow 标签尝试匹配语言匹配失败时回退到guess_lexer自动猜测再通过 rich 的Syntax渲染见_format_outputhowdoi/howdoi.py。测试用例test_colorize验证了彩色输出中会出现 ANSI 颜色码[38;见 test_howdoi.py。-x / --explain解释答案的选取过程开启后 howdoi 会把日志级别提升到INFO打印版本号、使用的搜索引擎、搜索 URL、找到的候选链接数量与具体链接、以及是否命中缓存等信息帮助你理解这个答案是怎么选出来的见command_line_runner与howdoi中的多处logging.infohowdoi/howdoi.py。-C / --clear-cache清空缓存删除 howdoi 的文件缓存。howdoi 使用cachelib的FileSystemCache将查询结果缓存在系统用户缓存目录appdirs.user_cache_dir(howdoi)通常为~/.cache/howdoi最大缓存条目数CACHE_ENTRY_MAX 128见 howdoi/howdoi.py。清空成功会输出绿色提示Cache cleared successfullyhowdoi/howdoi.py。-j / --jsonJSON 格式输出以原始 JSON 数组形式返回答案每条记录包含answer、link、position三个字段见_get_answer_worker与_format_answershowdoi/howdoi.py。测试用例test_json_output验证了 JSON 输出与文本输出的一致性见 test_howdoi.py非常适合在脚本或 Agent 管道中消费 howdoi 的结果。-v / --version显示版本号打印当前版本并直接退出。当前仓库版本为2.0.20见 howdoi/init.py。-e / --engine临时切换搜索引擎为本次查询指定搜索引擎可选google、bing、duckduckgo。需要注意-e只对当前这条命令生效如果想永久切换请使用环境变量HOWDOI_SEARCH_ENGINE。源码中howdoi()会把-e指定的引擎写入HOWDOI_SEARCH_ENGINE环境变量供后续调用链使用并校验其是否属于SUPPORTED_SEARCH_ENGINEShowdoi/howdoi.py 与 howdoi/howdoi.py。不同引擎的解析器各不相同Google 用正则提取/questions/数字/...链接并清理/url?跳转Bing 用 CSS 选择器.b_algo h2 aDuckDuckGo 则解析result__a锚点中的uddg参数howdoi/howdoi.py。当某个引擎临时屏蔽请求时howdoi 会自动降级换用下一个可用引擎重试BlockError处理逻辑howdoi/howdoi.py。--save / --view / --remove / --empty答案收藏stashhowdoi 内置了一个收藏夹功能底层基于 keep 命令库keep_utilshowdoi --save QUERY将本次查询结果存入 stashhowdoi --view查看 stash 中保存的所有答案howdoi --remove删除某条收藏未带查询词时以交互方式提示选择要删除的条目见prompt_stash_removehowdoi/howdoi.pyhowdoi --empty清空整个 stash。详细用法可进一步阅读 docs/howdoi_advanced_usage.md。环境变量全局配置 howdoi除了命令行参数howdoi 还支持通过环境变量做全局配置。下面结合源码逐一说明HOWDOI_COLORIZE1开启彩色输出等价于每次都传入-c。实现于command_line_runner当环境变量存在时强制将args[color]置为True见 howdoi/howdoi.py。HOWDOI_DISABLE_CACHE1禁用缓存功能。设置后 howdoi 使用cachelib的NullCache替代文件缓存每次查询都会真实发起网络请求见 howdoi/howdoi.py。默认情况下查询结果与搜索到的链接列表都会按调用函数名 参数 版本号生成缓存键_get_cache_keyhowdoi/howdoi.py第二次执行相同查询时直接命中缓存返回howdoi()中的缓存分支howdoi/howdoi.py。HOWDOI_DISABLE_SSL1将协议从https://降级为http://并关闭 SSL 证书校验。该变量在模块加载时决定全局的SCHEME与VERIFY_SSL_CERTIFICATE见 howdoi/howdoi.py。当请求抛出SSLError时howdoi 的错误日志也会建议用户设置该变量howdoi/howdoi.py。HOWDOI_SEARCH_ENGINEgoogle全局切换默认搜索引擎google/bing/duckduckgo默认google。_get_links中通过os.getenv(HOWDOI_SEARCH_ENGINE, google)读取howdoi/howdoi.py对应的搜索 URL 模板定义在SEARCH_URLShowdoi/howdoi.py。单次查询可用-e覆盖。HOWDOI_URLserverfault.com更换答案来源站点默认stackoverflow.com。源码中URL os.getenv(HOWDOI_URL) or stackoverflow.comhowdoi/howdoi.py该值既用于搜索引擎的site:限定搜索也用于 Google 结果链接的正则匹配howdoi/howdoi.py。因此你可以把来源换成其他 StackExchange 站点例如$ HOWDOI_URLcooking.stackexchange.com howdoi make pesto组合实战与快捷别名各参数可以自由组合。例如常配合-c与-n使用若不想每次都敲一长串参数可以在 shell 配置如.bash_profile中定义别名。以下别名来自项目 README.md# 每次返回 5 个彩色结果 alias hfunction hdi(){ howdoi $* -c -n 5; }; hdi之后直接使用$ h format date bash同样可以为指定站点定义别名alias hcookfunction hcook(){ HOWDOI_URLcooking.stackexchange.com howdoi $* ; }; hcook hcook make pesto还可以配合分页器优雅地阅读长输出alias hlessfunction hdi(){ howdoi $* -c | less --raw-control-chars --quit-if-one-screen --no-init; }; hdi工作原理速览一次howdoi query调用在底层经历的关键链路见 howdoi/howdoi.py解析参数argparse解析命令行构建参数字典命中帮助查询若查询属于内置帮助关键词直接返回使用提示查缓存若缓存中存在相同查询的结果直接返回搜索链接向HOWDOI_SEARCH_ENGINE指定的搜索引擎发起site:URL query搜索从结果 HTML 中提取 Stack Overflow 问题链接过滤出形如questions/数字/的问题页_get_questionshowdoi/howdoi.py抓取答案访问问题页并追加?answertabvotes参数按票数排序用 PyQuery 定位.answercell/.answer中的首个答案再决定提取代码块还是全文多进程并发当需要多个答案时使用multiprocessing.Pool并发抓取多个问题页howdoi/howdoi.py格式化输出依据-l、-j、-c等参数渲染最终结果写入 stdout。测试用例对上述行为做了较完整的覆盖例如test_position-p生效、test_multiple_answers-n生效、test_all_text-a输出全文且带来源链接等均可参考 test_howdoi.py搜索与抓取逻辑测试则借助page_cache/目录下的 HTML 快照离线运行无需真实联网。总结入门只需记住两条命令howdoi howdoi看用法、howdoi -h看全部参数常用参数-p第几个答案、-n返回几个答案、-a全文、-l只要链接、-jJSON、-c彩色、-e临时换搜索引擎全局偏好通过HOWDOI_COLORIZE、HOWDOI_DISABLE_CACHE、HOWDOI_DISABLE_SSL、HOWDOI_SEARCH_ENGINE、HOWDOI_URL五个环境变量配置收藏功能--save/--view/--remove/--empty与别名技巧可显著提升日常使用效率遇到搜索被引擎临时屏蔽时howdoi 会自动切换备用引擎重试仍失败则可通过-x查看详细日志定位原因。赞分享开发工具CLI【免费下载链接】howdoiinstant coding answers via the command line项目地址https://gitcode.com/gh_mirrors/ho/howdoi点击查看免费下载相关推荐iSH环境变量进程环境与命令行参数处理iSH环境变量进程环境与命令行参数处理 引言iOS上的Linux Shell环境挑战 在iOS设备上运行完整的Linux shell环境是一个技术挑战iS操作系统虚拟化CLIVector 命令行接口CLI完全指南子命令、参数与环境变量详解Vector 命令行接口CLI完全指南子命令、参数与环境变量详解 导读 Vector 将整个可观测性数据管道采集、转换、聚合、输出封装在 单个二进制文可观测性数据工程数据集成日志分析Pwntools 魔法命令行参数解析args 全局变量与 PWNLIB_ 环境变量实战指南Pwntools 魔法命令行参数解析args 全局变量与 PWNLIB_ 环境变量实战指南 导读 pwnlib.args 是 Pwntools 在 from网络安全渗透测试逆向工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表