【Python】fire 库:快速将 Python 脚本/类/函数/对象转换成命令行接口(CLI)

Python 中的 fire

fire 是由 Google 开发的一个轻量级 Python 库,用于快速将 Python 脚本/类/函数/对象转换成命令行接口(CLI)工具

只需一行代码即可为任何 Python 对象创建 CLI,大大减少了你手动使用 argparse 等库解析参数的工作量。


1. 安装 fire

pip install fire

2. 基本用法:函数转命令行工具

定义函数并运行

import fire

def greet(name="World"):
    return f"Hello, {
      
      name}!"

if __name__ == "__main__":
    fire.Fire(greet)

运行脚本

python script.py Alice

输出:

Hello, Alice!

3. 多个参数的函数

def add(a, b):
    return int(a) + int(b)

fire.Fire(add)
python script.py 3 5
# 输出: 8

4. 使用类作为命令入口

class Calculator:
    def add(self, a, b):
        return int(a) + int(b)

    def sub(self, a, b):
        return int(a) - int(b)

if __name__ == "__main__":
    fire.Fire(Calculator)
python script.py add 3 5  # 输出: 8
python script.py sub 10 4 # 输出: 6

5. 使用模块、字典、对象

def say(name):
    return f"Hi {
      
      name}"

tools = {
    
    
    'say': say,
    'add': lambda x, y: int(x) + int(y)
}

fire.Fire(tools)
python script.py say Alice
python script.py add 1 2

6. 自动帮助信息

运行任意 fire 脚本时加上 --help 或输入错误参数时,会自动生成 CLI 帮助信息:

python script.py --help

7. 嵌套命令结构支持

支持嵌套调用,例如:

class Tools:
    def hello(self):
        return "hello"

    class Math:
        def add(self, x, y):
            return int(x) + int(y)

fire.Fire(Tools)
python script.py Math add 2 3
# 输出: 5

8. 返回值自动输出

  • 返回 str/int 等基础类型:直接输出。
  • 返回 dictlist:自动格式化为 JSON。
  • 返回 None:无输出。

9. 适合用来干什么?

场景 说明
快速搭建命令行工具 将函数/类转成 CLI 接口
Python 脚本工具封装 将常用工具方法暴露出来
自动测试函数 通过命令行输入调用参数测试函数
调用训练脚本、预处理脚本 替代 argparse 使用

10. fire vs argparse vs click

特性 fire argparse click
配置复杂度 极低
编写速度 快(1 行搞定) 慢(需定义 parser)
自动帮助
多层命令结构 支持 支持 支持
推荐场景 原型开发 / 工具脚本 大型 CLI 工具 Web 框架类工具

11. 小结

功能 用法
快速命令行接口 fire.Fire(func_or_class)
支持函数/类 任意 Python 函数、类、对象
自动解析参数 位置参数、关键字参数自动映射
支持嵌套结构 类中嵌套类/方法
自动生成帮助 --help
多种输入对象 函数、类、字典、模块、实例

12. 示例项目结构

mycli.py
import fire

def hello(name="world"):
    return f"Hello, {
      
      name}"

if __name__ == "__main__":
    fire.Fire(hello)
python mycli.py Alice

fire 是 Python 中最简洁的命令行接口生成工具之一,非常适合快速构建开发工具、实验脚本、数据处理流程等命令行程序。只需专注于写逻辑,CLI 交互由它自动搞定。