ZetCode

Python Fire

最后修改于 2025 年 2 月 22 日

在本文中,我们将展示如何使用 Fire 模块在 Python 中创建命令行界面 (CLI)。

Fire 是一个 Python 库,可以从任何 Python 对象(包括函数、类和模块)自动生成命令行界面 (CLI)。

使用 Fire,您可以轻松地将任何 Python 组件变成 CLI。这使其成为自动化脚本、库和应用程序 CLI 创建的绝佳工具。

简单的 CLI

第一个示例演示了如何使用 Fire 创建一个简单的 CLI。

main.py
import fire

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

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

在此程序中,我们定义了一个简单的函数 greet,它接受一个可选参数 name。Fire 会自动为该函数生成一个 CLI。

import fire

我们导入 Fire 模块。

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

这是一个向用户致敬的简单函数。name 参数的默认值为“World”。

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

我们使用 fire.Firegreet 函数变成 CLI。当脚本运行时,Fire 会根据函数自动生成一个 CLI。

$ python main.py --name=Alice
Hello, Alice!
$ python main.py
Hello, guest!

我们使用和不使用 --name 参数运行脚本。

带类的 CLI

在下一个示例中,我们使用类创建了一个 CLI。

main.py
import fire

class Calculator:

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

    def subtract(self, a, b):
        return a - b

    def multiply(self, a, b):
        return a * b

    def divide(self, a, b):
        return a / b

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

在此程序中,我们定义了一个 Calculator 类,其中包含四个方法:addsubtractmultiplydivide。Fire 为该类生成一个 CLI,允许我们从命令行调用这些方法。

class Calculator:

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

    def subtract(self, a, b):
        return a - b

    def multiply(self, a, b):
        return a * b

    def divide(self, a, b):
        return a / b

这是具有四种算术方法的 Calculator 类。

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

我们使用 fire.FireCalculator 类变成 CLI。Fire 会自动为类中的每个方法生成命令。



我们使用不同的命令和参数运行脚本来执行算术运算。

创建嵌套命令

Fire 还支持嵌套命令,允许您创建更复杂的 CLI。

main.py
import fire

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

    def subtract(self, a, b):
        return a - b

class String:
    def concat(self, a, b):
        return a + b

    def repeat(self, a, times):
        return a * times

class CLI:
    def __init__(self):
        self.math = Math()
        self.string = String()

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

在此程序中,我们定义了两个类,MathString,每个类都有自己的方法。然后,我们创建了一个 CLI 类,该类将这些类实例化为属性。Fire 为每个类生成一个带有嵌套命令的 CLI。

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

    def subtract(self, a, b):
        return a - b

class String:
    def concat(self, a, b):
        return a + b

    def repeat(self, a, times):
        return a * times

这是具有各自方法的 MathString 类。

class CLI:
    def __init__(self):
        self.math = Math()
        self.string = String()

CLI 类将 MathString 类实例化为属性。

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

我们使用 fire.FireCLI 类变成 CLI。Fire 为 mathstring 属性生成嵌套命令。

$ python main.py math add 3 5  
8
$ python main.py string repeat falcon 3
falconfalconfalcon

我们使用嵌套命令运行脚本,以执行 MathString 类中的操作。

来自字典的 CLI

可以从字典中派生命令。

main.py
import fire

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

def multiply(a, b):
    return a * b

commands = {
    'add': add,
    'multiply': multiply,
}

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

我们定义了两个函数。这些函数通过字典映射到命令。

可变数量的参数

当我们定义一个带有前面带有星号 (*) 的参数的函数时,例如 *elements,这意味着该函数可以接受任意数量的位置参数,然后这些参数会被打包成一个元组。

main.py
import fire

def sort_elements(*elements):
    """Sort the given elements."""
    sorted_elements = sorted(elements)
    return sorted_elements

def uppercase_elements(*elements):
    """Convert the given elements to uppercase."""
    uppercased_elements = [element.upper() for element in elements]
    return uppercased_elements

commands = {
    'sort': sort_elements,
    'upper': uppercase_elements,
}

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

该程序有两个函数,用于对其元素进行排序和转换为大写。

$ py main.py sort war atom sky blue say pine 
atom
blue
pine
say
sky
war
$ python main.py upper war atom sky blue say pine
WAR
ATOM
SKY
BLUE
SAY
PINE

来源

Python Fire 指南

在本文中,我们使用 Python Fire 模块在 Python 中创建了命令行界面 (CLI)。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 Python 教程