开发工具CLI【免费下载链接】howdoiinstant coding answers via the command line项目地址https://gitcode.com/gh_mirrors/ho/howdoi点击查看免费下载howdoi是一款开源的命令行问答工具口号是 instant coding answers via the command line。它的核心价值在于当你在编码途中遇到诸如如何用 bash 格式化日期如何在 Python 中打印堆栈这类基础问题时不必离开终端去浏览器里翻阅博客并冒着分心的风险直接在控制台输入一句自然语言问题howdoi 就会为你抓取并返回对应的 Stack Overflow 高质量答案。读完本文你将掌握 howdoi 的完整安装方式、全部命令行参数与环境变量的用法、stash 收藏、别名定制以及其底层搜索引擎 → 链接提取 → 答案解析 → 缓存的完整工作链路。从四个典型示例认识 howdoihowdoi 的使用方式极其直观把你想问的问题当作位置参数传给命令即可。项目文档docs/index.md给出的四个经典示例覆盖了创建归档、格式化日期、打印堆栈、转换视频格式四类常见场景是理解工具形态的最佳入口。创建 tar 归档$ howdoi create tar archive tar -cf backup.tar --exclude www/subf3 www在 bash 中格式化日期$ howdoi format date bash DATEdate %Y-%m-%d在 Python 中打印堆栈注意 Python 2 语法这是 Stack Overflow 高票答案的原始形态howdoi 忠实返回原答案代码$ howdoi print stack trace python import traceback try: 1/0 except: print traceback traceback.print_exc() print end of traceback traceback.print_exc()将 MP4 转为 GIF利用 mplayer 的 gif89a 输出$ howdoi convert mp4 to animated gif video/path/to/video.avi outdir/path/to/output.gif mplayer $video \ -ao null \ -ss 00:01:00 \ # starting point -endpos 10 \ # duration in second -vo gif89a:fps13:output$outdir \ -vf scale240:180从源码看查询文本的处理非常轻量入口函数howdoi()会把查询参数用空格拼接、去掉问号后作为检索词见 howdoi/howdoi.py 中args[query] .join(args[query]).replace(?, )因此你可以自由地以自然语言组织问题甚至带上标点。安装与运行环境howdoi 面向 Python 3.7 及以上版本Python 2.7 支持已终止安装方式有四种方式一pip 安装推荐pip install howdoi方式二Homebrew 安装macOSbrew install howdoi方式三直接从本仓库源码安装pip install githttps://github.com/gleitz/howdoi.git#egghowdoi方式四基于 setuptools 安装适用于本地开发python setup.py install关于运行环境需要说明setup.pysetup.py声明了console_scripts入口howdoi howdoi.howdoi:command_line_runner安装后即在 PATH 中暴露howdoi命令其运行依赖包括 Pygments、cssselect、lxml、pyquery、requests、cachelib、appdirs、keep、rich、colorama 等这些依赖分别服务于 HTML 解析、网络请求、缓存、代码高亮与终端渲染。快速上手与内建帮助新用户第一课官方建议直接让 howdoi 教你怎么用它自己$ howdoi howdoi当查询命中SUPPORTED_HELP_QUERIES如use howdoi、run howdoi、setup howdoi、howdoi use howdoi等定义见 howdoi/howdoi.py时工具会返回一组示例命令而不是去搜索网络。查看完整帮助$ howdoi -h查询空参数时howdoi 会直接打印帮助文本-v/--version则输出当前版本号当前仓库版本为 2.0.20见 howdoi/init.py。命令行参数全解以下是howdoi -h输出的完整参数清单与 docs/usage.md 一致每个参数均配有用途说明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结合源码 howdoi/howdoi.py 中的get_parser()可以补充几个源码级细节-p/--pos与-n/--num的取值范围二者均通过自定义的IntRange参数类型校验允许范围为 120越界或非整数会直接报错测试用例test_negative_and_high_positive_int_values_rejected对此做了验证见 test_howdoi.py。-n在源码中的实际参数名为num_answers。-a/--all与默认行为默认情况下howdoi 只提取答案中的pre/code代码块并返回若答案中没有代码块则回退为返回整个答案正文加上-a后则完整返回答案全文含文字与代码多个答案之间以★ Answer from 链接 ★的标题分隔ANSWER_HEADER。-l/--link只输出答案来源链接格式匹配http(s)://.../questions/数字/...见测试test_answer_links_using_l_option。-c/--color开启后先用 Pygments 根据 Stack Overflow 的标签tags或查询关键词匹配词法分析器lexer匹配失败再调用guess_lexer猜测语言最终借助 rich 库输出带语法高亮的代码HOWDOI_COLORIZE1环境变量可等效开启。-j/--json以原始 JSON 输出每条答案包含answer、link、position三个字段测试test_json_output验证了 JSON 字段与普通输出的等价性。-x/--explain将日志级别提升到 INFO输出版本号、搜索 URL、候选链接、命中答案数等诊断信息便于排查为什么返回了这条答案。-e/--engine为单次查询指定搜索引擎支持google、bing、duckduckgo不传值时回退到环境变量HOWDOI_SEARCH_ENGINE默认 google。若指定的引擎不在支持列表内howdoi 会返回错误信息并列出可用引擎。环境变量配置howdoi 通过环境变量提供全局配置优先级为命令行参数 环境变量 默认值。完整的变量清单见 docs/howdoi_advanced_usage.md 与源码模块顶部的初始化逻辑环境变量取值示例作用HOWDOI_COLORIZE1启用彩色输出等效于每次加-c在command_line_runner()中读取HOWDOI_DISABLE_CACHE1禁用缓存改用NullCache一个永远为空的缓存见 howdoi/howdoi.pyHOWDOI_DISABLE_SSL1将协议从 HTTPS 切换为 HTTP 并关闭证书校验规避某些网络环境下的 SSL 错误HOWDOI_SEARCH_ENGINEgoogle/bing/duckduckgo全局切换默认搜索引擎HOWDOI_URLserverfault.com、pt.stackoverflow.com、cooking.stackexchange.com等切换答案来源站点默认stackoverflow.com可指向任意 StackExchange 站点两个与安全/稳定性相关的细节设置HOWDOI_DISABLE_SSL1后模块初始化会把SCHEME改为http://且VERIFY_SSL_CERTIFICATEFalse当请求抛出 SSL 错误时howdoi 会在日志中提示你改用该变量。此外请求会使用一个随机挑选的User-Agent模块内置了 5 个常见的浏览器 UA并自动适配系统代理。进阶技巧stash、别名与多站点检索Stash把答案收藏起来当你想把答案保存下来反复查看时可以使用 stashing 功能底层基于keep库实现howdoi --save QUERY # 收藏某个查询的答案 howdoi --view # 查看收藏列表 howdoi --remove # 移除一条收藏会提示选择要删除的条目 howdoi --empty # 清空整个收藏会提示确认源码层面的实现howdoi/howdoi.py 中_stash_save、_stash_remove、print_stash等--save会把当前查询参数与答案写入 keep 的命令库若 keep 尚未初始化会自动执行keep init--remove在未指定查询时会列出全部收藏并提示输入序号prompt_stash_remove非法输入会给出错误提示并重新询问。别名给常用参数做快捷键如果你固定使用某些参数例如总是要 5 条彩色答案可以把别名写进~/.bash_profilealias hfunction hdi(){ howdoi $* -c -n 5; }; hdi之后只需$ h format date bash另一个实用别名是把输出通过 less 分页展示alias hlessfunction hdi(){ howdoi $* -c | less --raw-control-chars --quit-if-one-screen --no-init; }; hdi检索其他 StackExchange 站点通过HOWDOI_URL环境变量可以把答案源切换到其他 StackExchange 站点。例如搜索烹饪问题HOWDOI_URLcooking.stackexchange.com howdoi make pesto同样可以封装为别名alias hcookfunction hcook(){ HOWDOI_URLcooking.stackexchange.com howdoi $* ; }; hcook hcook make pesto测试用例test_answers验证了切换HOWDOI_URLpt.stackoverflow.com葡萄牙语站后仍能正常返回答案说明该机制对站点语言是透明的。源码视角一次查询的完整链路深入 howdoi/howdoi.py 可以看到一次查询背后清晰的流水线这也是理解所有参数行为的基础构造搜索 URL_get_links()根据搜索引擎与HOWDOI_URL拼接形如https://www.google.com/search?qsite:stackoverflow.com%20查询词hlen的检索地址SEARCH_URLS中定义了 google、bing、duckduckgo 三种模板再对查询词做 URL 编码。抓取搜索页并防封禁_get_result()携带随机 UA、代理与 consent cookie 发起请求_is_blocked()会检测页面中是否出现验证码captcha等封禁特征。若被封禁则抛出BlockErrorhowdoi()会自动切换到下一个搜索引擎重试引擎失败列表记录在BLOCKED_ENGINES中全部引擎均失败时返回Unable to get a response from any search engine。提取 Stack Overflow 问题链接按引擎分别解析结果页google 用正则匹配/questions/id/slugbing 解析.b_algo块duckduckgo 解析a.result__a并还原uddg跳转参数随后_get_questions()过滤掉非问题页如 tag 页、缓存页。定位答案get_link_at_pos()按-p指定的位置取链接位置越界时取最后一个_get_answer()请求链接?answertabvotes按投票排序用 pyquery 定位第一个.answercell回退.answer再按前文所述逻辑提取代码块或全文并顺带收集该问题的标签用于高亮。并发抓取与缓存_get_answers()使用multiprocessing.Pool并行抓取多条候选链接返回的答案按-n数量截取。结果格式化_format_answers()负责把答案数组拼装为最终输出支持 JSON、仅链接、错误信息等形态。缓存机制速度与诊断howdoi 使用cachelib做两层缓存目的都是相同问题秒回搜索结果缓存以查询词 版本号为键_get_cache_key()由调用函数名、参数与版本号拼接而成缓存链接列表若搜索无结果会写入一个NULL占位值避免每次都做无效网络请求。页面缓存以链接为键缓存 Stack Overflow 页面 HTML命中后直接解析无需再次请求。缓存默认存放在系统用户缓存目录下的howdoi文件夹通过appdirs.user_cache_dir(howdoi)计算Linux 下通常为~/.cache/howdoi最大容纳 128 个条目CACHE_ENTRY_MAX。设置HOWDOI_DISABLE_CACHE1可完全关闭缓存-C/--clear-cache可一键清空缓存并打印Cache cleared successfully。本仓库根目录下的page_cache/目录即测试运行时抓取并压缩保存的页面样例gzip 格式测试通过_get_result_mock从该目录读取缓存页从而在无网络环境下复现真实解析流程见 test_howdoi.py。集成生态howdoi 生态丰富官方文档docs/index.md列举了多种集成方式编辑器VS Code 扩展本仓库extension/vscode-howdoi/下即其实现包含howdoi --stash等能力与 Emacs 集成即时通讯Slack、Telegram、Discord 机器人集成效率工具Alfred 工作流集成。另外仓库还包含一个 code-editor-integration 示例extension/code-editor-integration/TypeScript 实现演示了如何在通用代码编辑器中对接 howdoi 查询能力可作为二次开发的参考。测试与验证项目通过 test_howdoi.py基于 unittest对核心行为做了系统验证可作为理解工具行为的行为规格书标准查询与坏查询无结果查询均返回非空响应-l、-a、-p、-n、-j、-c等参数的行为断言如 JSON 字段与普通输出一致、位置参数改变答案等封禁BlockError时自动切换搜索引擎的错误处理路径_get_questions对问题链接与广告/tag 链接的过滤逻辑文本提取对 Markdown 链接的转换get_text()会把a链接转为文本形式HOWDOI_URL切换多语言站点的兼容性。运行测试python test_howdoi.py需要网络以抓取页面测试的 mock 机制会优先复用page_cache/下的本地页面。注意事项网络依赖howdoi 本质上是搜索引擎 Stack Overflow 抓取器需要能访问目标搜索引擎在受限网络下可尝试设置HOWDOI_DISABLE_SSL1或配置系统代理源码通过getproxies()自动读取代理设置。Python 版本需要 Python 3.7 及以上-p、-n的取值范围为 120。返回内容的时效性答案直接取自 Stack Overflow 高票回答可能包含 Python 2 等旧语法使用时请结合当前环境甄别。赞分享开发工具CLI【免费下载链接】howdoiinstant coding answers via the command line项目地址https://gitcode.com/gh_mirrors/ho/howdoi点击查看免费下载相关推荐告别浏览器查答案命令行即时编程神器 howdoi 终极解析告别浏览器查答案命令行即时编程神器 howdoi 终极解析 howdoi 是一款开源命令行编程问答工具 让你在终端里直接输入自然语言问题几秒钟就能拿到来自开发工具CLICANN/ops-math QR分解算子aclnnQr 查看源码 https://link.gitcode.com/i/b7a58a95be5977dcb69cd553181bfef7 产品支持算子库人工智能CANNhowdoi安装教程3步完成配置pip/brew快速上手即时编程答案工具howdoi安装教程3步完成配置pip/brew快速上手即时编程答案工具 howdoi 是一款开源的命令行即时编程答案工具让你在终端里直接提问无需打开浏开发工具CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?