Python Fire 是一个由 Google 开发的开源库,用于从任何 Python 对象自动生成命令行界面(CLI)。它的核心优势是:简单、自动化、几乎零样板代码。
如果你厌倦了为写一个简单的脚本而不得不编写 argparse
的大量模板代码,那么 Fire
绝对是你的得力助手。
为什么选择 Fire 而不是 Argparse?
argparse
是 Python 的标准库,功能强大,但不够简洁。Fire
通过自动化解决了这个问题。
场景:创建一个简单的问候脚本
使用 argparse
的传统方式:
你需要定义解析器、添加参数、解析参数,然后才能调用你的函数。
# greet_argparse.py
import argparse
def greet(name, greeting="Hello"):
"""生成一个问候语"""
print(f"{greeting}, {name}!")
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Greets someone.")
parser.add_argument("name", type=str, help="The name to greet.")
parser.add_argument("--greeting", type=str, default="Hello", help="The greeting to use.")
args = parser.parse_args()
greet(args.name, args.greeting)
使用 fire
的现代方式:
你只需要关注你的核心逻辑,然后把函数交给 fire.Fire()
。
# greet_fire.py
import fire
def greet(name, greeting="Hello"):
"""生成一个问候语"""
print(f"{greeting}, {name}!")
if __name__ == '__main__':
fire.Fire(greet)
Fire
会自动检查函数签名,将 name
识别为必需的位置参数,将 greeting
识别为可选的 --greeting
标志。命令行调用方式完全一样:
# 两种方式调用起来完全相同
$ python greet_fire.py World
Hello, World!
$ python greet_fire.py World --greeting "Good morning"
Good morning, World!
不仅仅是函数
Fire
的强大之处在于它可以处理任何 Python 对象,比如类。它会自动将类的方法映射为子命令。
# calculator.py
import fire
import time
class Calculator:
"""一个简单的计算器"""
def add(self, a, b):
"""计算两数之和"""
return a + b
def subtract(self, a, b):
"""计算两数之差"""
time.sleep(2) # 模拟耗时操作
return a - b
if __name__ == '__main__':
fire.Fire(Calculator)
执行子命令:
$ python calculator.py add 2 3
5
$ python calculator.py subtract 10 4
6
Fire
还会自动根据你的 docstrings
生成帮助文档。
$ python calculator.py -- --help
安装
pip install fire
总结
- 使用
Python Fire
: 当你需要为脚本、内部工具快速创建 CLI,或者想在开发调试时探索代码。 - 使用
argparse
: 当你构建需要分发给用户的正式应用,且需要对参数进行精细化控制时。
对于绝大多数日常脚本和内部工具来说,Fire
都能极大地提升你的开发效率。