python之parser.add

简介

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)

步骤:

  1. 创建一个解析器:创建 ArgumentParser() 对象

  2. 添加参数:调用 add_argument() 方法添加参数

  3. 解析参数:使用 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