Python3进阶之命令行参数化实现的几种方式总结

目录

1. sys.argv

2. argparse

3. getopt

4. optparse

5. click

6. docopt


图片

更多关于Python的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

在Python3中,有多种方式可以实现命令行参数化。本篇文章我将为大家介绍和总结几种常用的方式,分别包括:

  • 内置 sys.argv 模块

  • 内置 argparse 模块

  • 内置 getopt 模块

  • 第三方依赖库 click

  • 第三方依赖库docopt

原文:Python3进阶之命令行参数化实现的几种方式总结

1. sys.argv

sys.argv是Python标准库中的一个模块,用于获取命令行参数。它是一个包含命令行参数的列表,其中第一个元素是脚本的名称,后面的元素是传递给脚本的参数。

下面是一个使用sys.argv的例子:

import sys

# 获取命令行参数

print(sys.argv)

print(sys.argv[1])

print(sys.argv[1:])

num1 = sys.argv[1]

num2 = sys.argv[2]

print(int(num1) + int(num2))

图片

使用sys.argv的优点是它是Python标准库的一部分,不需要安装额外的库。缺点是它需要手动解析命令行参数,并且不会自动生成帮助信息。

关于sys模块更多的使用方法可以参考公众号CTO Plus文章《Python3标准库42. 系统级信息获取模块sys详解》。

2. argparse

argparse是Python标准库中的一个模块,用于创建命令行界面。它提供了一种简单而直观的方式来定义和解析命令行参数,并执行相应的操作。

下面是一个使用argparse的例子:

from inner_module_def_datastruct import AUTHOR

# argparse 模块是Python 内置的用于命令项选项与参数解析的模块,argparse 模块可以让人轻松编写用户友好的命令行接口,能够帮助程序员为模型定义参数。

# 导入argparse包

import argparse

# 创建一个命令行解析器对象ArgumentParser()

parser = argparse.ArgumentParser(description='this is steverocket scripts')

# 给解析器添加命令行参数add_argument() 用来添加参数

parser.add_argument('--num1', type=int, default=0)

parser.add_argument('--num2', type=int, default=2.2)

parser.add_argument('--author', type=str, default=AUTHOR)

# 从命令行中解析参数  parse_args()用来解析添加的(命令行)参数

args = parser.parse_args()

print(args, type(args)) # 默认输出:Namespace(num1=0, num2=2.2, author='SteveRocket') <class 'argparse.Namespace'>

print(args.num1, args.num2, args.author) # 默认输出: 0 2.2 SteveRocket

代码示例2:

import argparse

# 创建解析器

parser = argparse.ArgumentParser(description="计算两个数的和")

# 添加命令行参数和选项

parser.add_argument("num1", type=int, help="第一个数字")

parser.add_argument("num2", type=int, help="第二个数字")

# 解析命令行参数

args = parser.parse_args()

# 执行相应的操作

result = args.num1 + args.num2

print("和:", result)

使用argparse的优点是它可以自动生成帮助信息,减少了手动编写帮助文档的工作量。缺点是它需要手动定义命令行参数和选项。

关于argparse模块更多的使用方法可以参考公众号CTO Plus文章《Python3标准库2. argparse程序命令行参数解析模块实践和代码示例》。

3. getopt

getopt是Python标准库中的一个模块,用于解析命令行参数。它提供了类似于UNIX getopt()函数的命令行参数解析功能。

下面是一个使用getopt的例子:

import getoptimport sys
# 定义命令行参数和选项short_options = "n:m:"long_options = ["num1=", "num2="]
# 解析命令行参数arguments, values = getopt.getopt(sys.argv[1:], short_options, long_options)
# 处理命令行参数for current_argument, current_value in arguments:    if current_argument in ("-n", "--num1"):        num1 = int(current_value)    elif current_argument in ("-m", "--num2"):        num2 = int(current_value)
# 执行相应的操作result = num1 + num2print("和:", result)

使用getopt的优点是它提供了类似于UNIX getopt()函数的命令行参数解析功能。缺点是它需要手动定义命令行参数和选项,并且不会自动生成帮助信息。

4. optparse

optparse模块是Python 2中用于解析命令行参数的标准库。然而,在Python 3中,它已经被argparse模块取代。argparse模块提供了更强大和灵活的命令行参数解析功能。因此,我建议您使用argparse模块来处理命令行参数。

如果您坚持使用optparse模块,下面是一个简单的示例代码,展示了如何使用optparse模块解析命令行参数:

from optparse import OptionParser
def main():    # 创建OptionParser对象    parser = OptionParser()
    # 添加命令行选项    parser.add_option("-f", "--file", dest="filename",                      help="read data from FILE", metavar="FILE")    parser.add_option("-q", "--quiet",                      action="store_false", dest="verbose", default=True,                      help="don't print status messages to stdout")
    # 解析命令行参数    (options, args) = parser.parse_args()
    # 处理命令行参数    if options.verbose:        print("Verbose mode is on")    if options.filename:        print("Reading data from", options.filename)
if __name__ == "__main__":    main()

在上面的示例代码中,我们首先创建了一个OptionParser对象。然后,使用add_option()方法添加命令行选项。每个选项都有一个短选项和一个长选项,以及一些其他的参数,如帮助信息和默认值。最后,使用parse_args()方法解析命令行参数,并使用options对象访问选项的值。

这只是一个简单的示例,您可以根据自己的需求添加更多的选项和处理逻辑。

关于optparse模块更多的使用方法可以参考公众号CTO Plus文章《Python3标准库58. 应用程序命令行参数解析模块optparse详解》。

5. click

click是一个Python库,用于创建命令行界面。它提供了一种简单而直观的方式来定义和解析命令行参数,并执行相应的操作。

下面是一个使用click的例子:

import click
@click.command()@click.argument("num1", type=float)@click.argument("num2", type=float)def add(num1, num2):    result = num1 + num2    print("和:", result)
if __name__ == "__main__":    add()

使用click的优点是它提供了一种简单而直观的方式来定义和解析命令行参数,并且可以自动生成帮助信息。缺点是它需要安装额外的库,并且可能不够灵活。

6. docopt

docopt是一个Python库,用于创建命令行界面。它提供了一种简单而直观的方式来定义和解析命令行参数,并执行相应的操作。

需要使用pip包管理器进行安装这个包pip install docopt。

下面是一个使用docopt的例子:

from docopt import docopt
# 定义命令行参数和选项doc = """Usage:  script.py <num1> <num2>"""
# 解析命令行参数args = docopt(doc)
# 执行相应的操作num1 = float(args["<num1>"])num2 = float(args["<num2>"])result = num1 + num2print("和:", result)

使用docopt的优点是它采用自然语言的方式定义命令行参数和选项,使得创建命令行工具变得非常简单,并且可以自动生成帮助信息。缺点是它需要安装额外的库,并且可能不够灵活。

根据以上介绍,可以总结出各个库的应用场景:

  • sys.argv:适用于简单的命令行工具,不需要自动生成帮助信息。

  • argparse:适用于复杂的命令行工具,需要自动生成帮助信息。

  • getopt:适用于类似于UNIX getopt()函数的命令行工具。

  • click:适用于简单而直观的命令行工具,需要自动生成帮助信息。

  • docopt:适用于简单而直观的命令行工具,需要自动生成帮助信息。

读者可以根据自己的需求和场景,选择最适合自己的命令行参数处理方式,提升自己的命令行工具开发效率和代码质量。

Python专栏
https://blog.csdn.net/zhouruifu2015/category_5742543

欢迎关注公众号CTO Plus,有问题欢迎后台留言交流。

更多精彩,关注我公号,一起学习、成长

CTO Plus

一个有深度和广度的技术圈,技术总结、分享与交流,我们一起学习。 涉及网络安全、C/C++、Python、Go、大前端、云原生、SRE、SDL、DevSecOps、数据库、中间件、FPGA、架构设计等大厂技术。 每天早上8点10分准时发文。

306篇原创内容

公众号

标准库系列-推荐阅读:

推荐阅读:

原文:Python3进阶之命令行参数化实现的几种方式总结

最后,不少粉丝后台留言问加技术交流群,之前也一直没弄,所以为满足粉丝需求,现建立了一个关于Python相关的技术交流群,加群验证方式必须为本公众号的粉丝,群号如下:

图片

猜你喜欢

转载自blog.csdn.net/zhouruifu2015/article/details/134820277