用Click编写Python命令行工具

时间:2018-02-07 10:44来源:成都达内 作者:成都达内 点击:

  在编写Python命令行(CLI)应用程序时,使用Click库进行参数解析的深入教程

  成都python培训

  Python通常被称为胶水语言,因为它非常灵活,并且能够与现有的程序很好地联结在一起。 这意味着很大一部分Python代码被编写为脚本和命令行界面(CLI)。

  构建这些命令行界面和工具是非常强大的,因为它使得几乎所有的东西都可以自动化。 因此,随着时间的推移,CLI可能变得相当复杂。

  通常从一个非常简单的脚本开始,运行这些python代码来完成一件特定的事情。例如:访问web API并将输出打印到控制台:

  成都python培训

  仅通过python print_user_agent.py你就可以运行它,它就会打印出 API调用的user-agent。

  正如我所说,一个非常简单的脚本。

  但是,当这样一个Python命令行脚本变得越来越复杂时,你有什么选择?

  这就是我们将在整个教程中看到的内容。您将学习关于Python中构建CLI的基本知识,以及Click如何使其成为更好的体验。

  我们将使用这些知识,并从简单的脚本一步一步地通过命令行参数、选项及有用的用法说明CLI。所有这些都使用了一个叫做click的框架。

  在本教程的最后,你会知道:

  为什么click相比于argparse和optparse来说是一个更好的选择

  如何用它创建一个简单的CLI

  如何将强制命令行参数添加到您的脚本

  如何解析命令行标志和选项

  如何通过添加帮助(使用)文本,使命令行应用程序更加便于用户使用。

  而且你也会看到如何用最少量的代码来实现所有的功能。

  顺便说一下,本教程中的所有代码示例都使用Python 3.6。它们可能不适用于Python的早期版本,但是如果遇到任何麻烦,请在下面留言,我们将把它整理在一起。

  让我们开始吧!

  为什么要编写Python命令行脚本和工具?

  上面的代码片段仅仅是一个例子,在现实生活中并不是很有用。我在Python开发人员的职业生涯中编写的脚本要复杂得多。它们通常帮助构建,测试和部署应用程序,并使流程可重复。

  您可能有自己的经验,并知道这可能是我们日常工作的一大部分:有些脚本仍然保留在你们所构建的项目中,有些对其他团队或项目都有用,甚至可以扩展更多的功能。

  在这些情况下,使脚本更加灵活或者可以使用命令行参数进行配置变得非常重要。它使得向脚本提供服务器名称,凭证或任何其他信息成为可能。

  这就是像optparse和argparse这样的Python模块,让你的生活变得更轻松。但是,在我们仔细研究这些之前,让我们直接说一下我们的术语。

  命令行接口的基础知识

  命令行界面(CLI)以可执行文件的名称开头。您可以在控制台中键入它的名称,并访问脚本的主要入口点,例如pip。

  根据CLI的复杂性,通常可以将参数传递给脚本,可以是:

  1.参数,它是传递给脚本的必需参数。如果您不提供它,CLI将返回一个错误。例如,click是这个命令中的参数:pip install click。

  2.或者它可以是一个选项,它是一个可选的(||)参数,结合名称和值部分,如--cache-dir ./my-cache。你告诉CLI应将./my-cache值用作缓存目录。

  3.一个特殊选项是启用或禁用特定行为的标志。最常见的可能是 --help。您只需指定名称,CLI将在内部解释该值

  使用更复杂的CLI(例如pip或Heroku Toolbelt),您可以访问集合入口的功能。它们通常被称为命令或子命令

  当你使用pip install <PACKAGE NAME>安装Python包时,您可能已经使用了CLI。命令install会告诉CLI您将访问该功能来安装软件包,并使你能访问该特性的参数。

  Python 3.x标准库中提供的命令行框架

  将命令和参数添加到脚本中是非常强大的,但命令行的解析并不像您想象的那样直截了当。 你应该使用已经解决了这个问题的Python的软件包之一,来替代你自己写。

  两个最着名的软件包是optparse和argparse。 它们是遵循“包含电池”原则的Python标准库的一部分。

  他们大多提供相同的功能且使用代码非常相似。 最大的不同在于,optparse自Python 3.2以来已被弃用,argparse被认为是在Python中实现CLI的标准

  你可以在Python文档中找到更多关于它们的详细信息,来让你知道一个argparse脚本是什么样子的,下面是一个例子:

  成都python培训

  click vs argparse:一个更好的选择?

  你可能正在看上面的代码示例,在想“这些东西是什么意思?”这正是我在使用argparse遇到的一个问题:它不直观,很难阅读。

  这就是为什么我爱上了click

  click正在解决与optparse和argparse相同的问题,但使用方法稍微不同。它使用装饰器的概念。这需要命令是可以使用装饰器包装的函数。

  丹写了一个很好的介绍,如果这是你第一次听到这个词,或许你想快速学习。

  作者Armin Ronacher详细描述了他为什么写这个框架。您可以阅读文档中的“Why Click?”部分,我鼓励您看一下。

  我使用click的主要原因是你可以使用少量代码轻松构建功能丰富的CLI。即使您的CLI增长并且变得更加复杂,代码也很容易阅读。

  通过Click构建一个简单的Python命令行界面

  我已经谈了很多CLI和框架。我们来看看用click来构建一个简单的CLI是什么意思。与本教程中的第一个示例类似,我们可以创建一个简单的基于click的CLI,它向控制台打印一些东西。这并不是很费力:

  成都python培训

  首先,我们现在不用担心最后两行,当文件作为脚本执行时,这只是Python(稍微不直观)的方式来运行主函数。

  正如你所看到的,我们所要做的就是创建一个函数并添加@ click.command()装饰器。 这将它变成一个click命令,这是我们的脚本的主要入口点。 你现在可以在命令行上运行它,你会看到类似这样的东西:

  成都python培训

  click 之所以比较美观是因为,我们免费获得一些额外的功能。 我们没有实现任何帮助功能,但添加了--help选项,您将看到一个打印到命令行的基本帮助页面:

  成都python培训

  Click更实际的PythonCLI示例

  现在你已经知道click是如何使得建立一个简单的CLI更容易了,我们将看一个稍微更现实的例子。我们将构建一个允许我们与Web API 进行交互的程序。最近每个人都会使用,它们让我们访问一些更酷的数据。

  本教程其余部分将介绍的API是OpenWeatherMap API。 它提供当前天气以及特定位置的五天预报。 我们将从他们的API示例返回当前天气的位置。

  在开始编写代码之前,我喜欢尝试使用API来更好地理解它是如何工作的。 我想你应该知道的一个工具是HTTPie,我们可以使用它来调用示例API并查看返回的结果。 你甚至可以尝试他们的在线终端来运行它,无需安装。

  让我们来看看当我们将API中的位置设置为london时会发生什么:

  成都python培训

  如果你正在用这样的面孔查看屏幕 (责任编辑:成都达内)

CopyRight © 2002-2016 成都达内科技职业技能培训学校 (www.cdtedu.com) 版权所有 成都达内 川公网安备 51019002000307号 网站地图