如何使用click在python中创建自己的命令行程序

想自己制作Python命令行程序,但发现它太难了?使用Click,一个有用的Python工具来简化代码。...

Click是一个用于编写命令行接口的Python包。它为您生成了漂亮的文档,并允许您用一行代码构建命令行界面。简而言之:它非常棒,可以帮助你的程序更上一层楼。

pythod-programming-click

下面是如何使用它来活跃Python项目。

无需单击即可编写命令行程序

编写命令行程序是可能的,而不使用Click,但是这样做需要更多的努力和更多的代码。您需要解析命令行参数、执行验证、开发逻辑来处理不同的参数,以及构建自定义帮助菜单。要添加新选项吗?然后,您将修改您的帮助函数。

编写自己的代码没有什么问题,这样做是学习Python的一个好方法,但是单击允许您遵循“不要重复自己”(干燥)原则。不单击,您将编写代码,它是脆弱的,需要大量维护,无论何时发生任何更改。

下面是一个简单的命令行界面,没有单击:

import sysimport randomdef do_work():""" Function to handle command line usage"""args = sys.argvargs = args[1:] # First element of args is the file nameif len(args) == 0:print('You have not passed any commands in!')else:for a in args:if a == '--help':print('Basic command line program')print('Opti***:')print(' --help -> show this basic help menu.')print(' --monty -> show a Monty Python quote.')print(' --veg -> show a random vegetable')elif a == '--monty':print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?')elif a == '--veg':print(random.choice(['Carrot', 'Potato', 'Turnip']))else:print('Unrecognised argument.')if __name__ == '__main__':do_work()

Python command line interface example

这27行Python运行良好,但非常脆弱。对程序所做的任何更改都需要大量其他支持代码才能更改。如果更改参数名称,则需要更新帮助信息。这段代码很容易失控。

点击的逻辑是一样的:

import clickimport [email protected]()@click.option('--monty', default=False, help='Show a Monty Python quote.')@click.option('--veg', default=False, help='Show a random vegetable.')def do_work(monty, veg):""" Basic Click example will follow your commands"""if monty:print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?')if veg:print(random.choice(['Carrot', 'Potato', 'Turnip']))if __name__ == '__main__':do_work()

这个单击示例在16行代码中实现相同的逻辑。将为您分析参数,并生成帮助屏幕:

Python Click automatically generated help screen

这个基本的比较显示了使用Click等程序可以节省多少时间和精力。虽然命令行界面在最终用户看来可能是相同的,但是底层代码更简单,而且您将节省大量的编码时间。您在将来编写的任何更改或更新也会显著增加开发时间。

单击python入门

在使用Click之前,您可能希望配置一个虚拟环境。这将阻止您的Python包与您的系统Python或您可能正在处理的其他项目发生冲突。如果您想玩Python并单击,也可以在浏览器中尝试Python。

最后,确保您运行的是pythonversion3。可以在pythonversion2中使用Click,但是这些示例在python3中。进一步了解python2和python3之间的区别。

准备好后,使用PIP从命令行单击install(如何为Python安装PIP):

pip install click

编写第一个点击程序

在文本编辑器中,从导入开始,单击:

import click

导入后,创建一个方法和一个主入口点。我们的Python OOP指南更详细地介绍了这些内容,但它们提供了一个存储代码的地方,以及Python开始运行代码的方法:

import clickimport randomdef veg(): """ Basic method will return a random vegetable""" print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']))if __name__ == '__main__': veg()

这个非常简单的脚本将输出一个随机的蔬菜。您的代码看起来可能不同,但这个简单的示例非常适合与Click结合使用。

另存为单击_示例.py,然后在命令行中运行它(导航到其位置后):

python click_example.py

你应该看到一个随机的蔬菜名称。让我们通过添加Click来改进。将代码更改为包含Click decorators和for循环:

@click.command()@click.option('--total', default=3, help='Number of vegetables to output.')def veg(total): """ Basic method will return a random vegetable""" for number in range(total): print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']))if __name__ == '__main__': veg()

运行时,您将看到一个随机蔬菜显示三次。

让我们把这些变化分解一下。那个@click.command命令()decorator配置单击以使用紧跟在decorator后面的函数。在本例中,这是veg()函数。你将需要这个为每一个方法,你想使用与点击。

那个@单击.optiondecorator配置单击以接受来自命令行的参数,它将把这些参数传递给您的方法。这里使用了三个参数:

  1. --total:这是total参数的命令行名称。
  2. 默认值:如果在使用脚本时未指定total参数,单击将使用默认值中的值。
  3. 帮助:一个简短的句子解释如何使用你的程序。

让我们看一下点击操作。从命令行运行脚本,但按如下方式传入total参数:

python click_example.py --total 10

通过设置--10,从命令行,脚本将打印十个随机蔬菜。

如果传入--help标志,您将看到一个很好的帮助页面,以及可以使用的选项:

python click_example.py --help

Python Click help

添加更多命令

可以在同一个函数上使用多个Click decorator。向veg函数添加另一个单击选项:

@click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.')

别忘了把它传递到方法中:

def veg(total, gravy):

现在运行文件时,可以传入gravy标志:

python click_example.py --gravy y

帮助屏幕也已更改:

Python Click help screen

以下是完整的代码(为了保持整洁,进行了一些小的重构):

import clickimport [email protected]()@click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.')@click.option('--total', default=3, help='Number of vegetables to output.')def veg(total, gravy): """ Basic method will return a random vegetable""" for number in range(total): choice = random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']) if gravy: print(f'{choice} with gravy') else: print(choice)if __name__ == '__main__': veg()

更多点击选项

一旦你知道了基本知识,你就可以开始看更复杂的点击选项。在本例中,您将学习如何将多个值传递给单个参数,单击该参数将转换为元组。您可以在Python字典指南中了解更多关于元组的信息。

创建一个名为click\u example\u 2.py的新文件。以下是您需要的启动代码:

import clickimport [email protected]()def add(): """ Basic method will add two numbers together.""" passif __name__ == '__main__': add()

这里没有什么新鲜事。上一节详细解释了此代码。添加@单击.option被叫号码:

@click.option('--numbers', nargs=2, type=int, help='Add two numbers together.')

这里唯一的新代码是nargs=2和type=int选项。这告诉Click接受numbers选项的两个值,并且它们都必须是整数类型。您可以将其更改为您喜欢的任何数字或(有效)数据类型。

最后,更改add方法以接受numbers参数,并对它们进行一些处理:

def add(numbers): """ Basic method will add two numbers together.""" result = numbers[0] + numbers[1] print(f'{numbers[0]} + {numbers[1]} = {result}')

您传入的每个值都可以通过numbers对象访问。下面是如何在命令行中使用它:

python click_example_2.py --numbers 1 2

Python Click nargs result

click是python实用程序的解决方案

正如您所看到的,Click很容易使用,但是非常强大。虽然这些示例只介绍了Click的基本功能,但是现在您已经掌握了很多基本功能,您还可以了解更多的功能。

如果您正在寻找一些Python项目来练习新发现的技能,为什么不学习如何使用Python控制Arduino,或者使用Python阅读和编写Google工作表呢?这两个项目中的任何一个都非常适合转换为Click!

  • 发表于 2021-03-23 13:56
  • 阅读 ( 276 )
  • 分类:编程

你可能感兴趣的文章

如何在linux上设置emoji键盘

... 你将如何结束你的表情?你会考虑吗? ...

  • 发布于 2021-03-12 00:22
  • 阅读 ( 306 )

如何让python和javascript使用json进行通信

有没有想过如何在两种编程语言之间发送数据?是否尝试发送一个对象或多个数据段? ...

  • 发布于 2021-03-16 01:22
  • 阅读 ( 300 )

了解如何使用python虚拟环境

...您是一名经验丰富的Python开发人员,还是刚刚起步,学习如何设置虚拟环境对于任何Python项目都是必不可少的。和我一起讨论Python虚拟环境的所有知识。 ...

  • 发布于 2021-03-16 10:00
  • 阅读 ( 240 )

Windows10中LinuxBashShell快速指南

...更多的特性。了解更多关于Bash-on-Windows的信息,从您应该如何以及为什么安装它,到您可能不知道的隐藏特性。 ...

  • 发布于 2021-03-17 01:06
  • 阅读 ( 194 )

如何创建自己的私有自托管ReadItLater应用程序

... 让我们看看如何在计算机中创建Instapaper或Pocket的克隆,而不会丢失任何网页资源。 ...

  • 发布于 2021-03-19 09:29
  • 阅读 ( 290 )

什么是符号链接(symlink)?如何在linux中创建一个

... 让我们看看什么是符号链接,如何在Linux以及macOS和Windows上创建符号链接,为什么需要这种特殊类型的快捷方式,等等。 ...

  • 发布于 2021-03-19 23:12
  • 阅读 ( 312 )

mac上安装的8个最有用的自制应用程序

Homebrew称自己为“macOS缺少的包管理器”,但如何使用它呢? ...

  • 发布于 2021-03-21 19:54
  • 阅读 ( 201 )

如何在python中写入或打印文件

需要打印到Python文件吗?今天,我们将了解如何轻松地开始写入文件。我们将介绍创建新文件、附加现有文件和覆盖现有文件。 ...

  • 发布于 2021-03-26 13:43
  • 阅读 ( 197 )

如何在python中创建简单类

在面向对象语言中,类是一段可扩展的代码,表示用于创建和使用该类对象的模板。类的对象只是引用所定义类的实例。 ...

  • 发布于 2021-03-26 20:18
  • 阅读 ( 255 )

如何使用python if语句

...更多关于Python的if语句吗?不用担心,这里,我们将解释如何使用Python的if条件来控制您的程序。 ...

  • 发布于 2021-03-27 00:49
  • 阅读 ( 278 )
愛ping
愛ping

0 篇文章