初探 Google 开源的 Python 命令行库

重磅!Google开源Gemini CLI:免费命令行AI编码神器,挑战Cursor/Copilot Google 最新推出的 Gemini CLI 是一款开源的 AI 代理工具,将 Gemini 模型的强大功能直接带入开发者的终端,为编码、内容生成和任务管理提供了全新的可能性。这不仅仅是一个新工具,这更像是一封战书,向所有付费 AI 编程助手宣告:一个强大、免费、且高度可定制的时代,或许已经到来。 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

剧照 | 《哪吒之魔童降世》

作者:HelloGitHub-Prodesire

一、前言

在本系列前面所有文章中,我们分别介绍了 argparse、docopt 和 click 的主要功能和用法。它们各具特色,都能出色地完成命令行任务。argparse 是面向过程的,需要先设置解析器,再定义参数,再解析命令行,最后实现业务逻辑。docopt 先用声明式的语法定义出参数,再过程式地解析命令行和实现业务逻辑。click 则是用装饰器的方式进一步简化显式的命令调用逻辑,但仍然不够面向对象。

而今天要介绍的 fire则是用一种面向广义对象的方式来玩转命令行,这种对象可以是类、函数、字典、列表等,它更加灵活,也更加简单。

本系列文章默认使用 Python 3 作为解释器进行讲解。
若你仍在使用 Python 2,请注意两者之间语法和库的使用差异哦~

二、介绍

fire 可以根据任何 Python 对象自动生成命令行接口。它有如下特性:

  • 能以简单的方式生成 CLI

  • 是一个开发和调试 Python 代码的实用工具

  • 能将现存代码或别人的代码转换为 CLI

  • 使得在 Bash 和 Python 间的转换变得更容易

  • 通过预先为 REPL 设置所需的模块和变量,使得实用 REPL 更加容易

通过如下命令可快速安装 fire 库:

pip install fire

三、快速开始

回忆下使用 argparse、docopt 和 click 实现命令行程序的步骤:

  • 对于 argparse 来说,要先设置解析器,再定义参数,再解析命令行,最后实现业务逻辑(四步)

  • 对于 docopt 来说,要先定义定义接口描述,再解析命令行,最后实现业务逻辑(三步)

  • 对于 click 来说,就是实现业务逻辑和通过装饰器的方式定义参数(两步)

它们的实现步骤越来越简单,从四步简化到了两步。而今天的主角 fire 只需一步,现业务逻辑就够了。

这简直简单的不可思议,为什么这样做就够了?我们不妨考虑下 Python 中的函数,函数是不是可以对应一个命令行程序,而函数的参数可以对应命令行程序的参数和选项呢?再看看 Python 中的类,一个类是不是可以对应一个命令行程序,而类中的每个实例方法就可以对应子命令,实例方法中的参数就是对应子命令的参数和选项。

这么一想,理论上确实是可以实现的,我们不妨通过下面的示例来看看 fire 是如何让我们通过简单的方式实现命令行程序。

3.1 使用函数

来看这么一个例子:

import fire

def hello(name="World"):
  return 'Hello {name}!'.format(name=name)

if __name__ == '__main__':
  fire.Fire(hello)

在上述例子中定义一个 hello 函数,它接受 name 参数,并且有默认值 "World"。使用 fire.Fire(hello) 即可非常简单快速地实现命令功能,这个命令行就接受 --name 选项,不提供时使用默认值 "World",提供时就按提供的值来。

可在命令行中执行下列命令:

$ python hello.py
Hello World!
$ python hello.py --name=Prodesire
Hello Prodesire!
$ python hello.py --help
INFO: Showing help with the command 'hello.py -- --help'.

NAME
    hello.py

SYNOPSIS
    hello.py <flags>

FLAGS
    --name=NAME

3.2 使用类

使用函数是最简单的方式,如果我们想以更有组织的方式来实现,比如使用类,fire 也是支持的。

import fire

class Calculator(object):
  """A simple calculator class."""

  def double(self, number):
    return 2 * number

  def triple(self, number):
    return 3 * number

if __name__ == '__main__':
  fire.Fire(Calculator)

在上述例子中定义一个 Calculator 类,它有两个实例方法 double 和 triple,并且都接受 number 参数,没有默认值。使用 fire.Fire(Calculator) 即可非常简单快速地实现命令功能,这个命令行支持两个子命令 double 和 triple,位置参数 NUMBER 或选项参数 --number

可在命令行中执行下列命令:

$ python calculator.py double 10
20
$ python calculator.py triple --number=15
45
$ python calculator.py double --help
INFO: Showing help with the command 'calculator.py double -- --help'.

NAME
    calculator.py double

SYNOPSIS
    calculator.py double NUMBER

POSITIONAL ARGUMENTS
    NUMBER

NOTES
    You can also use flags syntax for POSITIONAL ARGUMENTS

四、小结

fire 的使用方式非常简单,定一个 Python 对象,剩下的就交给 fire 来处理,可谓是非常的 Pythonic,这也是它会如此受欢迎的原因。

除了上面展示的内容,fire 还支持更多种类的 Python 对象,也拥有很多强大的功能,我们将在接下来几节中逐步走近它。

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,立即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~

题图:pexels,CC0 授权。

好文和朋友一起看~

Python命令行工具:交互Google搜索与新闻服务 API,即应用程序编程接口(Application Programming Interface),是一种软件中介,允许两个应用程序之间进行通信。在Google搜索API的情境中,开发者通过API调用Google搜索引擎提供的服务,实现从客户端程序中进行网络搜索的功能。API的工作原理是基于HTTP请求与响应模型。用户的应用程序发送一个HTTP请求到API的端点,API服务器处理这个请求,然后返回一个JSON或XML格式的响应。 阅读详情

相关推荐

GD32 TIMER0 PWM输出死活没波形?别忘了这个关键配置(附完整代码)

本文详细解析了GD32 TIMER0 PWM输出无波形的常见问题,特别强调了高级定时器特有的主输出使能配置。通过完整的代码示例和调试技巧,帮助开发者快速解决PWM输出问题,适用于无刷电机控制等嵌入式应用场景。

weixin_30906185的博客 397

详解Python标准库之命令行界面库

命令行界面(CLI)是开发者与程序交互的基础方式,Python标准库提供了一系列工具链,从简单的参数解析到复杂的交互式终端界面,覆盖了命令行应用开发的全场景。本文将深入解析argparse、optparse、getpass、fileinput、curses及其子模块的底层机制与实战技巧,帮助开发者构建高效、健壮的命令行工具。

Amon的专栏 1700

博通PEX89000 PCIe 5.0交换芯片:如何为AI集群构建高效GPU互联架构

本文深入解析了博通PEX89000 PCIe 5.0交换芯片如何为AI集群构建高效的GPU互联架构。该芯片通过提供高带宽、低延迟的PCIe 5.0交换能力,打破传统GPU通信的带宽瓶颈,并支持多主机共享、资源池化及软件定义拓扑,从而显著提升大规模AI训练与推理任务的效率与资源利用率。

weixin_29214559的博客 411

要在Python中进行Google搜索,您可以使用Google的搜索API或第三方库

如果您打算在项目中频繁使用搜索功能,或者需要更高级的功能,您可能需要考虑使用Google的官方API,如Google Custom Search JSON API。此外,Google可能会对频繁的搜索请求进行限制或要求用户进行验证。要在Python中进行Google搜索,您可以使用Google的搜索API或第三方库,如`google-search-python`。另外,如果您只是偶尔需要进行搜索,并且不需要频繁地发送请求,那么使用`google-search-python`库可能是一个更简单和快速的选择。

博客域名:borter.blog.youkuaiyun.com 1608

生成式深度学习(第二版)-第一章-Conda环境下TensorFlow和Keras的安装和配置

按照书籍中的代码运行提示,需要配置Docker。个人的机器上正好有 conda4.14.0,索性就在本地环境进行配置。

GarryWang1248的博客 398

Fluent 中多相流模型全面解析

3.颗粒或液滴在连续相中的运动:若关注颗粒或液滴在连续相中的运动轨迹、分布规律以及与连续相的相互作用,如喷雾干燥、气力输送等过程,Eulerian-Lagrangian 模型则是最佳选择。Eulerian-Eulerian 模型可以准确模拟气体在固体颗粒中的流动情况,包括颗粒的流化状态、气体与颗粒之间的传热传质过程,为气固流化床的优化设计和操作提供依据。通过该模型,可以了解混合器内不同位置的混合程度、颗粒的运动轨迹以及液固相间的相互作用,从而改进混合器的结构和操作条件,提高混合效率。

khhdp的博客 3086

Python知识点:如何使用Python开发命令行工具

使用 Python 开发命令行工具是一个非常实用的技能,能够简化日常工作流程并自动化常见任务。选择合适的库argparse适合简单工具,click则更加灵活。命令行参数解析:通过定义位置参数和可选参数,让用户可以方便地提供输入。提供帮助和文档:确保工具有完善的帮助信息,通过--help命令展示。打包工具:通过setuptools打包工具,使其可供他人使用。通过这些步骤,你可以轻松开发和发布自己的命令行工具,提高工作效率。

杰哥在此的专栏 1735

Databricks Genie:语义编译器架构与企业级智能解析实践

语义层是现代数据平台实现自然语言查询的核心基础,其本质是将业务术语映射为可执行、可治理的数据契约。原理上依赖结构化元数据、值字典与数据血缘三支柱协同,通过分层AI代理(如Intent Parsing、Retriever、Verifier)实现意图识别→语义对齐→安全执行的闭环。技术价值在于降低SQL使用门槛的同时保障审计性、一致性和权限可控性,适用于销售运营、财务分析等一线业务场景。本文深入解析Databricks Genie作为典型语义编译器的落地逻辑,涵盖Unity Catalog知识注入、七层Agen

weixin_29053695的博客 337

Python Click库:轻松构建优雅的命令行工具

Python Click 库是一个强大的工具,用于快速构建优雅的命令行接口(CLI)。它通过装饰器语法简化了参数配置,减少了样板代码,适用于从简单脚本到复杂多级命令程序的开发。Click 支持多级子命令、复杂参数验证与类型转换、自动生成帮助文档、彩色终端输出以及跨平台兼容性。安装 Click 只需使用 pip install click 命令。基础使用包括创建简单的 CLI 程序、添加位置参数和选项参数。高级功能涵盖子命令分组、参数类型验证和彩色终端输出。

engchina的专栏 2785

CVE-2017-7921漏洞深度解析:海康设备明文密码泄露原理与七层防御

网络摄像头安全本质上是嵌入式Web服务安全,其核心在于身份认证机制是否健全。CVE-2017-7921并非传统远程执行漏洞,而是因信任错位导致的未授权API暴露——`/Security/users/1`接口绕过Session校验,直接返回admin明文密码。该问题根植于安防设备早期‘物理隔离+前端可控’的设计假设,在P2P、云平台等新场景下全面失效。技术价值在于揭示了轻量级HTTP服务中路径级访问控制缺失的普遍风险;典型应用场景包括ONVIF协议接管、Telnet后门登录及NVR侧横向移动。本文基于DS-2

weixin_33324197的博客 403

LVGL core theme主题管理(lv_theme.c)

如果打开宏,主题的初始化是在显示设备注册时完成的。整个themes的实现放在目录下面。这里一共有三套主题(basic、default和mono)可供选择或者参考。源码中默认对接的是 default 主题,所以在中,看到的是调用default主题的接口。也就是说,如果需要更换主题,把这里面的接口换掉就可以了。或者要重新做一套主题,参考这些实现修改也就可以了。虽说有三套主题,但逻辑流程是一样的。主要完成两个工作:构造lv_theme_t结构体和初始化默认样多备用(style_init函数内实现)。构造。....

Bigan(安)的博客 3411

Python命令行工具开发:四大Python库终极对决!

如果你只是开发一些简单的命令行工具,argparse就够用了;要是追求简洁优雅的语法和强大的功能,click是个不错的选择;想结合类型提示开发现代化的工具,可以试试typer;而注重文档和代码一致性的话,docopt也许能满足你的需求。在实际开发中,你可以根据项目的具体需求和自己的喜好来选择合适的库,这样才能事半功倍地开发出强大的命令行工具。

weixin_42321517的博客 493

ubuntu下编译qtwebengine

ubuntu qtwebengine

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 1463

Google 开源的 Python 命令行库:初探 fire

作者:HelloGitHub-Prodesire涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库点击本文最下方的“阅读原文”即可获取一、前言在本系列前面所有文章中,我...

HelloGitHub 的博客 783

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Google 开源的 Python 命令行库:深入 fire(一)

作者:HelloGitHub-Prodesire涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库点击本文最下方的“阅读原文”即可获取一、前言在第一篇“初探 fire”...

HelloGitHub 的博客 712

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Google 开源的 Python 命令行库:深入 fire(二)

作者:HelloGitHub-Prodesire涉及的示例代码,已同步更新到HelloGitHub-Team仓库点击本文最下方的“阅读原文”即可获取一、前言在上一篇文章中我们介绍了 ...

HelloGitHub 的博客 966

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python Fire - 一个好用的命令行生成库

有没有这样一种感觉: 学了 Python,好歹也会一门语言了,偶尔想要自己写点小工具来用用,当代码写好后,怎么运行是个问题了。难道,每次要用的时候都要打开编码工具来运行? 写个带界面的?但是 UI 库都好难学,web 框架更难学。 那就写个命令行呗! 但是 Python 自带的命令行用起来并不方便。 现在有一个更简单方便的库,由 Google 开源的 fire库。 我们来学习一下怎么用。 首先...

小满测试 588

开源项目推荐:Google Analytics Python封装库

开源项目推荐:Google Analytics Python封装库 1. 项目基础介绍 该项目是Google Analytics的一个Python封装库,由开源技术专家debrouwere开发并维护。它提供了对Google Analytics API的便捷访问,支持核心和实时API。项目主要使用Python编程语言编写。 2. 核心功能 命令行界面:提供了完整的命令行界面,使得用户可以直接通过命...

gitblog_00056的博客 316

Google 开源的 Python 命令行库:fire 实现 git 命令

作者:HelloGitHub-Prodesire涉及的示例代码,已同步更新到HelloGitHub-Team仓库点击本文最下方的“阅读原文”即可获取一、前言在前面三篇介绍 fire ...

HelloGitHub 的博客 727

如何贡献代码:Google Ads Python库开源项目参与指南

Google Ads Python库是用于简化Google Ads API访问的客户端库,提供了便捷的认证管理和SOAP服务客户端创建功能。本文将详细介绍如何参与这个开源项目的代码贡献,从环境准备到提交PR的完整流程,帮助新手开发者顺利成为贡献者。 ## 贡献前的准备工作 ### 签署贡献者许可协议(CLA) 在提交代码之前,您需要完成法律手续: - **个人贡献者**:签署[个人CLA](

gitblog_00449的博客 408

如何从python调用命令行_Google 开源的 Python 命令行库:深入 fire(一)

作者:HelloGitHub-Prodesire涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库点击本文最下方的“阅读原文”即可获取一、前言在第一篇“初探 fire”的文章中,我们初步掌握了使用 fire 的简单步骤,了解了它 Pythonic 的用法。今天我们将深入了解 fire 的子命令、嵌套命令和属性访问功能。本系列文章默认使用 Python 3 作为解释器进行...

weixin_39538847的博客 117

googlevoice:实现Google Voice功能的Python库

googlevoice:实现Google Voice功能的Python库 项目介绍 googlevoice 是一个开源的Python库,它允许用户通过Python语言来访问Google Voice服务的功能。该项目基于之前的pygooglevoice项目,由Joe McCall和Justin Quick开发,并由jaraco维护。googlevoice 提供了包括打电话、发送短信、下载语音邮件以及...

gitblog_00973的博客 809

Google 有哪些牛逼的开源项目?

本文盘点 Google 开源项目中 Star 最多的 6 个开源项目。@逛逛GitHub 历史还盘点过百度、阿里、腾讯等互联网大厂的开源成果,可以查看历史文章翻阅。本期推荐开源项目目录:1. 核心 Java 库2. 使用 Node.js 高效编写脚本3. 谷歌开源项目风格指南4. 高效的 KV 数据库5. Python Fire6. Gson01核心 Java 库Guav...

公众号:逛逛GitHub 2753
上一篇: 99 行 Python 代码实现《冰雪奇缘》特效?网友:大神碉堡!
下一篇: 推荐 20 个堪称神器的命令行工具
codingpy
博客等级 码龄11年 1870粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值