Python 如何创建美观的命令行界面
在这篇文章中,我们将学习和探索如何在Python中创建美观的命令行界面。
首先,让我们简要介绍一下Python,然后我们再讨论命令行界面。
为什么选择Python
Python是一种流行的高级编程语言,以其简洁、易读和多功能而闻名。Python于1980年末由Guido van Rossum创建,现已成为最广泛使用的用于Web开发、科学计算、数据分析和机器学习的语言之一。
Python的语法设计得直观易懂,并且注重减少编写特定任务所需的代码量。这使得它成为初学者和有经验的程序员的首选,他们可以快速原型化或开发复杂的应用程序。
Python是构建命令行界面(CLI)的流行选择,因为它是一种高级语言,具有干净、易读的语法,可以轻松编写和维护代码。Python广泛的标准库包括支持构建CLI的模块,如argparse、click、docopt等,它们提供了易于使用和灵活的命令行参数解析和帮助消息生成。
此外,Python是跨平台的,这意味着在一个平台上编写的代码可以在另一个平台上轻松运行,而无需进行任何修改。这使得开发人员能够编写跨平台的命令行应用程序,可以在多个操作系统上使用,包括Windows、Linux和macOS。
Python还拥有庞大活跃的社区,这意味着开发人员可以轻松找到帮助、资源和第三方软件包,以扩展其CLI应用程序的功能。此外,Python具有高度可扩展性,开发人员可以使用C或C++编写Python模块,以优化CLI应用程序的性能关键部分。
总而言之,Python的易用性、可读性、跨平台兼容性和丰富的库使其成为构建命令行界面的绝佳选择。
现在让我们更详细地讨论一下命令行界面。
在Python中使用CLI通常涉及定义一个当程序从命令行运行时调用的main函数。argparse模块提供了一种定义用户可以输入的命令行参数和选项的方法,并将它们解析为一组Python对象,可以在main函数中使用。
click库提供了一个更高级的接口,用于在Python中构建CLI,具有更直观的语法,支持命令组、上下文对象和进度条等功能。docopt是另一个流行的用于构建CLI的库,它使用的语法类似于在README文件中编写的用法示例。
除了构建CLI,Python还可以使用subprocess模块在命令行上自动化任务,允许开发人员在Python程序中运行外部命令并与其输出交互。这对于文件操作、系统管理和测试等任务非常有用。
既然我们已经详细讨论了可用于创建CLI的不同包,让我们逐个在代码中使用它们。
argparse
argparse是一个用于解析命令行参数和生成帮助消息的Python模块。它提供了一种简单的方式来定义和处理Python程序中的命令行参数。使用argparse,开发人员可以指定他们的程序所期望的参数,argparse会负责解析用户提供的命令行参数。
argparse提供了许多功能,如位置参数、可选参数、默认值、类型检查、帮助消息和子命令。它还支持不同的参数样式,包括短选项(例如“-f”)、长选项(例如“–file”)和组合短选项(例如“-xyz”)。
考虑下面显示的代码。
示例
# argparse example
import argparse
def main():
parser = argparse.ArgumentParser(description='Add some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+', help='integer list')
parser.add_argument('--sum', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)')
args = parser.parse_args()
result = args.sum(args.integers)
print(result)
if __name__ == '__main__':
main()
解释
这段代码允许您在运行Python脚本时提供一些额外的信息。
首先,您需要指定要添加的信息。您可以添加整数并选择是对它们进行求和还是找到最大值。您可以通过设置参数使用 argparse 模块来实现这一点。
接下来,当您运行程序时,可以传入参数的值。程序将读取这些值并使用它们来执行您请求的计算。
最后,程序将计算结果打印到屏幕上。
if name ‘main‘ 部分只是确保当您运行程序时,它会运行main()函数,但如果您将代码导入到另一个程序中,则不会运行它。
要运行上述Python脚本,可以运行以下命令。
命令
python3 main.py 1 2 3 4
当我们将多个数字作为参数传递给我们的命令行界面时,我们会得到以下输出。
输出
4
现在让我们传递另一个参数,名为 –sum,以及这些数字。
命令
python3 main.py 1 2 3 4 --sum
输出
10
点击
点击是一个Python库,它使得为你的Python程序创建命令行界面(CLI)变得简单。它提供了一种简单直观的方式来定义命令行参数和选项,并且使得构建复杂的命令行界面变得容易,包括嵌套命令、帮助文本等。使用Click,你可以为你的Python程序创建一个专业级的CLI,而无需编写大量的代码。许多Python开发者使用Click来为他们的程序构建CLI。
现在让我们首先使用Click创建一个简单的CLI,第一个要求是在我们的机器上安装Click。
为了安装Click,我们可以运行下面显示的命令。
命令
pip install click
如果你使用的是最新版本的python,你也可以使用pip3。
考虑下面展示的代码。
示例
# Click Example
import click
@click.command()
def main():
click.echo("This is a CLI built with Click ✨")
if __name__ == "__main__":
main()
说明
这段代码是使用Click库创建Python程序的简单命令行界面(CLI)的示例。
@click.command()装饰器告诉Click主函数是一个CLI命令。当程序运行时,Click将解析命令行参数并调用适当的CLI命令。
click.echo()函数将指定的文本打印到命令行。在这个例子中,它打印了消息”This is a CLI built with Click”。
if name “main“:块确保只有在直接运行程序时才调用主函数,而不是在另一个Python程序中作为模块导入时。
当程序运行时,主函数被调用,它又调用click.echo()函数将消息打印到命令行。
要运行上面的代码,可以运行下面显示的命令。
命令
python3 main.py
输出
This is a CLI built with Click ✨
现在让我们使用click来创建一个交互式的CLI。
请考虑下面所示的代码。
示例
import click
@click.command()
@click.option('--name', prompt='Your name', help='The person to greet.')
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--verbose', is_flag=True, help='Print verbose output.')
def hello(name, count, verbose):
"""Simple program that greets NAME for a total of COUNT times."""
for i in range(count):
greeting = f'Hello, {name}!'
if verbose:
greeting += f' ({i+1}/{count})'
click.echo(greeting)
if __name__ == '__main__':
hello()
说明
该代码使用Click库定义了一个名为hello的CLI命令。@click.command()装饰器告诉Click hello是一个命令。
@click.option()装饰器定义了可以传递给hello命令的三个选项。–name指定要问候的人的姓名,–count指定问候他们的次数,–verbose是一个启用详细输出的标志。
要运行上述代码,我们可以运行下面显示的命令。
命令
python3 main.py --name TutorialsPoint --count 3 --verbose
输出
Hello, TutorialsPoint! (1/3)
Hello, TutorialsPoint! (2/3)
Hello, TutorialsPoint! (3/3)
现在让我们再通过使用docopt来创建一个更有创意的命令行界面。
Docopt
Docopt是一个用于通过解析传递给Python脚本的参数来创建命令行界面的Python库。与argparse或click不同,它们需要显式定义命令和参数,docopt使用自然语言语法来指定命令行参数及其在程序中的使用方式。这使得定义和使用命令行界面变得容易,而无需编写大量样板代码。使用docopt,您可以以人类可读的格式定义程序的用法文档,然后docopt将自动为您生成命令行解析器。
考虑下面的代码示例。
示例
# docopt example
#!/usr/bin/env python
from docopt import docopt
def main(args):
if args['--version']:
print('My CLI Tool Version 1.0')
elif args['hello']:
print(f'Hello, {args["<name>"]}!')
elif args['goodbye']:
print(f'Goodbye, {args["<name>"]}!')
else:
print(__doc__)
if __name__ == '__main__':
args = docopt(__doc__, version='My CLI Tool Version 1.0')
main(args)
解释
docopt库是用来基于脚本文档字符串中指定的使用描述来解析命令行参数的。args字典包含了解析后的命令行参数。
主函数是脚本的入口点。它检查传递给脚本的命令行参数,并打印相应的消息。
如果指定了–version选项,脚本将打印版本号。如果指定了hello选项,它将打印带有作为参数提供的名称的问候消息。如果指定了goodbye选项,它将打印带有作为参数提供的名称的告别消息。如果没有指定这些选项中的任何一个,它将打印使用信息。
要运行上述代码,我们可以运行下面显示的命令。
命令
python3 main.py hello TutorialsPoint
输出
Hello, TutorialsPoint!
结论
总之,命令行界面 (CLI) 是现代软件开发的重要部分。Python 提供了几个库来快速简便地构建命令行界面,包括 argparse、Click 和 Docopt。每个库都有自己的优点和缺点,选择使用哪个库取决于项目的具体要求。
Argparse 是一个内置模块,提供了一种简单而强大的方法来解析命令行参数。Click 是一个第三方库,提供清晰而直观的语法,特别适用于构建复杂的命令行界面。Docopt 是一个自然语言解析器,根据使用说明生成命令行解析器。
无论选择哪个库,都要以用户为中心设计命令行界面。界面应该清晰易用,并为用户提供有用的反馈。通过合适的设计和适当的库,Python 开发人员可以创建功能强大且用户友好的命令行界面,使他们的软件更易访问和有用。