如何在 Ubuntu 22.04 上使用 Python Fire 创建 CLI

介绍

Python Fire 是一个 Python 库,允许您从 Python 对象自动使用 CLI(命令行接口)。

虽然从标准的Python库使用)(https://andsky.com/tech/tutorials/how-to-use-argparse-to-write-command-line-programs-in-python)。

在本教程中,您将安装Python Fire并使用它来创建自定义CLI。这些CLI可以创建而无需触摸Python源代码。

前提条件

  • Ubuntu 22.04服务器,根据我们Ubuntu 22.04的初始服务器设置指南设置,非 root** 用户拥有"sudo"权限并启用了防火墙.
  • 联合国 Python 3的最新版本安装在您的机器上,并创建了虚拟环境,紧随其后[如何安装Python 3,并在Ubuntu 22.04服务器上设置编程环境 (https://andsky.com/tech/tutorials/how-to-install-python-3-and-set-up-a-programming-environment-on-an-ubuntu-22-04-server).
  • 联合国 熟悉Python语言,如何在其中编码. 一个很好的入门器是这个关于[如何用Python 3编码(https://www.digitalocean.com/community/tutorial_series/how-to-code-in-python-3)的系列. .

第1步:安装Python Fire

Python Fire 是托管在 PyPI上,可从 pip 安装。 安装 Python 3 的前提条件后,您应该创建并启用虚拟环境。 如果您没有启用它,请导航到您的环境目录:

1cd environments

然后启用您的虚拟环境:

1source my_env/bin/activate

这确保您的安装不会影响全球的安装。此外,全球级的安装可以与apt等包管理器不可预测地互动。

1pip install fire

可以以多种方式被召唤,包括在命令行中,没有对您的Python程序添加代码. 您将接下来探索该方法,随后通过将其添加到您的实际代码来探索Python Fire的常规用途,以允许更细微的控制。

步骤 2 — 从程序创建一个 CLI 没有添加代码

首先,设置您的Python文件,可以称之为文件、程序或脚本,所有这些都是正确的。

要创建新文件,请使用nano或您喜爱的文本编辑器:

1nano example.py

在新文件中插入以下Python代码:

1[label example.py]
2def my_name(name):
3  return "My name is {name}".format(name=name)

保存和退出你的文件. 使用nano你可以通过按CTRL+O然后按CTRL+X来做到这一点。

这是一个名为my_name的Python函数,它需要一个名为name的参数。用所需变量调用这个函数将name变量插入到使用Python字符串格式的句子中。

使用 Python Fire,您可以将现有的 Python 代码转换为 CLI 命令,并在插入变量时执行此代码,而无需使用 Python 代码来调用它。

1python -m fire example my_name --name=sammy
1[secondary_label Output]
2My name is sammy

在这里,您将示例指定为您要执行的Python程序,而my_name则是您要执行的特定的函数,因为my_name是需要一个名为name的参数的函数,因此您使用--name旗帜提供参数。

没有对您的Python代码进行任何更改,您已经构建了一个工作CLI。

步骤 3 — 从导入的程序创建 CLI

使用 Python Fire 的更常见方法是将导入您的代码,这允许更细微的控制和更复杂的代码结构,以便在 CLI 中使用。

打开您的example.py并插入以下代码:

1[label example.py]
2import fire
3
4def my_name(name):
5  return "My name is {name}".format(name=name)
6
7if __name__ == '__main__':
8  fire.Fire()

原始代码发生了两个显著的变化:‘fire’在开始时被导入,后来在结束时被调用到‘fire.Fire()’呼叫,这允许CLI功能。这只会发生在Python程序由用户直接运行时,并且不会在导入到另一个Python脚本时运行。

保存和退出您的文件。

现在,您可以通过输入此命令来使用您的 CLI:

1python example.py my_name sammy
1[secondary_label Output]
2My name is sammy

因为fire现在在开始时被导入到你的Python代码中,你不再需要通过python -m调用命令中的fire模块,而是可以直接通过文件调用你的CLI,并为函数名和变量提供参数。

这提供了更清洁的 CLI 体验,而不是需要对实际代码进行修改;接下来,您将直接从一个函数中创建一个 CLI,而不是整个 Python 程序。

步骤 4 — 从函数创建 CLI

您可以选择从特定函数中创建一个 CLI,而不是将您的程序中的所有函数暴露在您的 CLI 中。

 1[label example.py]
 2import fire
 3
 4def my_name(name):
 5  return "My name is {name}".format(name=name)
 6
 7def my_full_name(first_name, last_name):
 8    return "My name is {first_name} {last_name}".format(first_name=first_name, last_name=last_name)
 9
10if __name__ == '__main__':
11  fire.Fire(my_name)

保存和退出您的文件。

這次有兩個函數.有原來的「my_name」函數,現在有第二個「my_full_name 函數」。

此外,当fire.Fire在最后被调用时,它现在需要一个参数. 为了指定您想要使用的函数,您将其列入这里作为参数。

由于您在 CLI 中指定了要使用的函数,因此在命令行中,您只需提供执行函数所需的程序和参数:

1python example.py sammy
1[secondary_label Output]
2My name is sammy

请注意,在输出中,只返回我的_名称函数,正如您指定的那样。

但是,您可以将多个函数暴露在您的 CLI 中。 要做到这一点,请将一个Python字典传递到fire.Fire呼叫中。 使用一个字典作为一个关键值数据结构,您可以为您的 CLI 指定多个函数。

 1[label example.py]
 2import fire
 3
 4def my_name(name):
 5  return "My name is {name}".format(name=name)
 6
 7def my_full_name(first_name, last_name):
 8    return "My name is {first_name} {last_name}".format(first_name=first_name, last_name=last_name)
 9
10if __name__ == '__main__':
11  fire.Fire({
12      'my_name': my_name,
13      'my_full_name': my_full_name,
14  })

现在您可以通过您的 CLI 调用第一个函数:

1python example.py my_name sammy
1[secondary_label Output]
2My name is sammy

或者你可以调用你的第二个函数:

1python example.py my_full_name sammy shark
1[secondary_label Output]
2My name is sammy shark

这一次的变化是字典的通过. 使用字典,您可以从您的 CLI 调用任一函数. 接下来,您将从 Python 类创建一个 CLI,而不是一个函数。

步骤 5 — 从类创建 CLI

如何构建您的代码,无论是在 classes 还是仅在函数中,都取决于偏好和个人遵守最佳做法。

要创建一个类,你将重组你的代码,将你的函数放置在其中作为类的一部分。

 1[label example.py]
 2import fire
 3
 4class Namer(object):
 5    def my_name(self, name):
 6        return "My name is {name}".format(name=name)
 7
 8    def my_full_name(self, first_name, last_name):
 9        return "My name is {first_name} {last_name}".format(first_name=first_name, last_name=last_name)
10
11if __name__ == '__main__':
12  fire.Fire(Namer)

现在,尽管重构了代码以使用类,但您可以使用上一个步骤中的相同命令通过 CLI 调用第一个函数:

1python example.py my_name sammy
1[secondary_label Output]
2My name is sammy

或者你可以调用你的第二个函数:

1python example.py my_full_name sammy shark
1[secondary_label Output]
2My name is sammy shark

所创建的 CLI 功能相同,使用与上一步相同的命令. fire.Fire 调用也是相同的. 唯一改变的是重组代码以使用类。

Python Fire 适应您的偏好,允许您使用类或常规函数以您喜欢的方式编码。

结论

在此教程中, 您已经安装了 Python Fire, 然后探索多种方法, 使用 Python 程序、 函数和类创建您自定义的 CLI 。 对于更深的潜水,请查看[官方文档] (https://github.com/google/python-fire/blob/master/docs/guide.md). 而对于 Python CLI 创建的替代方法,请检查关于 [如何使用 argparse 在 Python (https://andsky.com/tech/tutorials/how-to-use-argparse-to-write-command-line-programs-in-python) 中写入命令行程序的指南.

Published At
Categories with 技术
comments powered by Disqus