简介
argparse — 命令行选项、参数和子命令解析器 — Python 3.12.0 文档
argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块,可以让人轻松编写用户友好的命令行接口。通过在程序中定义好我们需要的参数,然后 argparse 将会从 sys.argv 解析出这些参数。argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
使用
简单代码示例:
import argparse parser = argparse.ArgumentParser(description='What the program does') parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.') parser.add_argument('--seed', type=int, default=72, help='Random seed.') parser.add_argument('-e', '--epochs', type=int, default=10000, help='Number of epochs to train.') args = parser.parse_args() print(args.sparse) print(args.seed) print(args.epochs)
步骤:
创建一个解析器:创建 ArgumentParser() 对象
添加参数:调用 add_argument() 方法添加参数
解析参数:使用 parse_args() 解析添加的参数
测试:
$ python prog.py -h
部分参数的解释:
default:不指定参数时的默认值。
type:命令行参数应该被转换成的类型。
required:可选参数是否可以省略 (仅针对可选参数)。当为True时则这个参数必须要有,反之则可以不指定,使用默认值default。
help:某个参数的帮助消息
参数的种类
-
位置参数
基于位置的参数,参数的出现不需要前缀(以 - 或 – 开头的),而且是必须配置的参数。定义argparse模块的位置参数,参数名称不要有前缀(- 或 --),argparse模块使用这个前缀来判断是位置参数,还是可选参数。
import argparse parser = argparse.ArgumentParser() parser.add_argument('echo') args = parser.parse_args() print(args.echo)
这个代码定义了一个位置参数echo,由于是必须出现的位置参数,程序后面在打印echo参数的值的时候,不需要判断是否配置了这个参数。因为如果没有配置,parser.parse_args()这个函数就会报错。
位置参数在命令行中的出现和配置顺序,与代码中参数的定义顺序是对应的。如果定义了多个位置参数,命令行输入参数的时候,顺序要与多个参数的定位顺序保持一致。
位置参数在命令使用时,直接输入参数。
-
可选参数
只要是用 - 或者 – 开头定义的命令行参数,都属于可选参数。
有一个约定俗成的惯例:单个字母只是用一个 - ,多个字母使用两个 - (–)。python也支持一个 - 后面跟多个字母,不过看起来有些怪异。下面的定义 -s 是 --sn 的简写。(Linux命令行参数风格)
import argparse parser = argparse.ArgumentParser() parser.add_argument('-s','--sn') args = parser.parse_args() if args.sn: print(args.sn) else: print('no argument')
可选参数也可以变成必选参数!必选参数跟位置参数还不一样,必选参数的位置可以比较灵活。
-
必选参数
import argparse parser = argparse.ArgumentParser() parser.add_argument('-s', required=True) parser.add_argument('-e','--echo') args = parser.parse_args() if args.s: print(args.s) if args.echo: print(args.echo)
这段代码 -s 参数是必须参数,但是它出现的位置是灵活的。-e 和 -s 出现的位置可以调换,而且 -s 必须要有。
由可选参数变化而来的必选参数,有的时候比位置固定的参数更好用。就是因为它必须出现,而且位置灵活。位置参数的位置是固定的。
参考:
https://docs.python.org/zh-cn/3/library/argparse.html#argumentparser-objects
https://blog.csdn.net/qq_34243930/article/details/106517985
https://www.pynote.net/archives/1562