目录
更多关于Python的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。
在Python3中,有多种方式可以实现命令行参数化。本篇文章我将为大家介绍和总结几种常用的方式,分别包括:
-
内置 sys.argv 模块
-
内置 argparse 模块
-
内置 getopt 模块
-
第三方依赖库 click
-
第三方依赖库docopt
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 getopt
import 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 + num2
print("和:", 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 + num2
print("和:", 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篇原创内容
公众号
标准库系列-推荐阅读:
推荐阅读:
最后,不少粉丝后台留言问加技术交流群,之前也一直没弄,所以为满足粉丝需求,现建立了一个关于Python相关的技术交流群,加群验证方式必须为本公众号的粉丝,群号如下: