Python的argparse模块

我主要想做的功能就是执行python脚本时带上参数,然后执行参数对应的功能。 

基础学习

官方解读:https://docs.python.org/zh-cn/3/library/argparse.html

主要有三个步骤:

1. 创建 ArgumentParser() 对象

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

3. 使用 parse_args() 解析添加的参数

添加参数

分为添加位置参数-positional arguments和可选参数-optional arguments

添加位置参数声明的参数名前缀不带-或--,按照顺序进行解析,在命令中必须出现,否则报错。

parser.add_argument("a")

parser.add_argument('integers',metavar='N',type=int,nargs='+',help='an integer for the accumulator')

添加可选参数声明的参数名前缀带-或--,前缀是-的为短参数,前缀是--是长参数,两者可以都有,也可以只有一个,短参数和长参数效果一样。可选参数的值接在位置参数的后面,不影响位置参数的解析顺序。

parser.add_argument('--sum',dest='accumulate',action='store_const',const=sum,default=max,help='sum the integers (default: find the max)')

其中action参数的'store_const'指的是:触发action时的动作为sum,默认值是输出max(???待确认)。

$python prog.py 1 2 3 4  #1,2,3,4是为位置参数,必须有的(但是怎么从参数中确认这个参数的个数是应该是多少个呢?)

4 #默认是输出最大值

$python prog.py 1 2 3 4 --sum

10 #加了可选参数之后,是进行求和运算

//1216更新学习到此,此后继学习这一模块

1217更新:

解析参数

如例子:
parser = argparse.ArgumentParser(description='Process some integers.')

parser.add_argument('integers', metavar='N', type=int, nargs='+',

                    help='an integer for the accumulator')

parser.add_argument('--sum', dest='accumulate', action='store_const',

                    const=sum, default=max,

                    help='sum the integers (default: find the max)')

parser.add_argument('--foo', help='foo help')

ArgumentParser 通过 parse_args() 方法解析参数。它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。

# args = parser.parse_args(['--sum', '7', '-1', '42']) #如果此处已经写好了参数,则直接获取这里面的参数执行--sum,而不从命令行读取,即使执行脚本是输出了其他数字进行--sum,输出结果为48

args = parser.parse_args() #  但是通常情况下,parse_args() 会被不带参数调用,而 ArgumentParser 将自动从 sys.argv 中确定命令行参数,这是命令行参数生效。

print(args.accumulate(args.integers))

ArgumentParser 对象学习

class argparse.ArgumentParser(prog=Noneusage=Nonedescription=Noneepilog=Noneparents=[ ]formatter_class=argparse.HelpFormatterprefix_chars='-'fromfile_prefix_chars=Noneargument_default=Noneconflict_handler='error'add_help=Trueallow_abbrev=Trueexit_on_error=True)

prog:表示在显示帮助信息的的程序的名字,默认值是sys.argv[0](我理解的应该就是脚本的名字),但是如果在创建这个对象的时候定义了prog的值,如prog="ArgparseLearning",则执行这个脚本的时候 --help显示的名字将是ArgparseLearning:

parser = argparse.ArgumentParser(description='Process some integers.',prog="ArgparseLearning")

定义prog

要想在其他地方引用prog设置的值,无论是从 sys.argv[0] 或是从 prog= 参数确定的程序名称,都可以在帮助消息(help参数)里通过 %(prog)s 格式串来引用。

parser.add_argument('--foo', help='foo of the %(prog)s program')

--help脚本是显示:

引用prog

usage:默认情况下,ArgumentParser 根据它包含的参数来构建用法消息:这个从以上的几个截图可以看出来。可以使用自行定义usage关键字来覆盖默认值。例如:

parser = argparse.ArgumentParser(description='Process some integers.',prog="ArgparseLearning", usage='%(prog)s [-h][--sum][--foo]')

运行脚本显示:

usage的实例

description:大多数对 ArgumentParser 构造方法的调用都会使用 description= 关键字参数。这个参数简要描述这个程度做什么以及怎么做。在帮助消息中,这个描述会显示在命令行用法字符串和各种参数的帮助消息之间,如以上的一些截图,不在赘述。在默认情况下,description 将被换行以便适应给定的空间。如果想改变这种行为,见 formatter_class 参数。

epilog: 一些程序喜欢在 description 参数后显示额外的对程序的描述。这种文字能够通过给 ArgumentParser:: 提供 epilog= 参数而被指定。

parser = argparse.ArgumentParser(description='Process some integers.',prog="ArgparseLearning", usage='%(prog)s [-h][--sum][--foo]',epilog="just some test msg for epilog param")

运行显示:

epilog示例

parents:有些时候,少数解析器会使用同一系列参数。 单个解析器能够通过提供 parents= 参数给 ArgumentParser 而使用相同的参数而不是重复这些参数的定义。parents= 参数使用 ArgumentParser 对象的列表,从它们那里收集所有的位置和可选的行为,然后将这写行为加到正在构建的 ArgumentParser 对象。请注意大多数父解析器会指定 add_help=False . 否则, ArgumentParse 将会看到两个 -h/--help 选项(一个在父参数中一个在子参数中)并且产生一个错误。使用parent=定义的内容之前,先初始化,在子解析器之后改变父解析器,变化不会应用到子解析器上。

parent_parser = argparse.ArgumentParser(add_help=False)

parent_parser.add_argument('--parent', type=int)

parser = argparse.ArgumentParser(description='Process some integers.',prog="ArgparseLearning", usage='%(prog)s [-h]['--sum][--foo]',epilog="just some test msg for epilog param",parents=[parent_parser])

运行脚本得到://这部分读得不是很懂.....等待高阶用法指点迷津

parent示例

你可能感兴趣的:(Python的argparse模块)