argparse模块使用

记录学习argparse模块的一个产出,也防止自己忘记,多看看,温故而知新。
下面分三个方面来讲:定位参数,可选参数以及add_argumentparser的参数使用,所有记录都配上最简单的例子,更容易理解

  1. 定位参数
import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str')
args = parser.parse_args()
print(args)
argparse模块使用_第1张图片
image.png

在命令窗口下执行,参数选择-h,会打印出str是定位参数,-h是可选参数,因此这里只带上-h的参数是达不到代码的目的,所以需要将str的值传进去,如下图,这里将两个参数都带上,可以看到str的值被打印,并且help信息也被打印。但其实-h是默认的可选参数,我们使用的时候可以不带。


argparse模块使用_第2张图片
image.png

以上代码就是定位参数的简单使用

  1. 可选参数
import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str')
parser.add_argument('-n')
args = parser.parse_args()
print(args)
print(args.n)

执行argparse_use.py如下,能看出如果不传入n的值,默认打印none,所以可选参数的含义顾名思义。


argparse模块使用_第3张图片
image.png

很多代码中能看到parser.add_argument('-n', '--name')代码中添加可选参数name,那n和name是什么关系,应该怎么使用?这个比较简单:如果n和name同时存在,那么在命令行中传参的时候可以用n或者name,但是代码中调用的话只能用name,比如说打印时需要修改成print(args.name)

其实大部分代码都没有那么简单,add_argument这个函数的参数比较多,以上是最简单的使用方法,接下来会以最简单的方式说明这个函数的用法。

  1. add_ArgumentParse
    name or flag: 定位参数和可选参数的名称,注意如果-n和–name同时出现,则认为name为可选参数名称。-n是–name的简写,因此解析时必须用全称,但命令行执行时简称、全称都可以。这里的解析我理解成在代码中调用,比如说args.name,命令执行就是说在命令窗口输入参数值的时候,比如上面的python argparse_use.py “I am the string” –n “Lisa”(这个上面已经说到了)
    下面看个简单例子:
import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str')
parser.add_argument('-n', '--name')
args = parser.parse_args()
print(args)
print(args.name)

add_argument中多加一个—name,咱们来执行看看,


argparse模块使用_第4张图片
image.png

可以看到,在命令行里传参用-n或者—name都行。另外,在代码里调用参数只能用name哦,可以尝试将以上代码最后一个打印修改成print(args.n),看看会出现什么结果!
default:对于可选参数,如果命令行执行时未指明可选参数的值,则可选参数默认为default的值;如果命令行指定可选参数值,则可选参数即命令行指定的值。对于定位参数不适用。
看明白了上面的,这个就很容易懂了,还是举个例子,
import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str')
parser.add_argument('-n', '--name', default="Bob")
args = parser.parse_args()
print(args)
print(args.name)
help:无论可选参数还是定位参数,都是在命令行执行–help时显示的提示内容。
这个前面的例子中已经用过了。
type:指定传入参数的类型。在命令行执行时传入的参数也必须是type指定的类型。如果不写,则命令行传入的参数无论写2还是a都默认为string。参数解析时会自动将2和a转换成string
还是拿刚刚那个例子来执行,


argparse模块使用_第5张图片
image.png

添加一个int参数看看
import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str')
parser.add_argument('-n', '--name', default="Bob")
parser.add_argument('-a', '--age', type=int)
args = parser.parse_args()
print(args)
print(args.name)
print(args.age/2)
argparse模块使用_第6张图片
image.png

nargs:
1) ‘*’:所有当前命令行参数被聚集到一个列表中(定位参数一个列表,可选参数一个列表)通过 nargs=’*'来实现多个位置参数通常没有意义,但是多个选项是可能的

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str', nargs='*')
parser.add_argument('-n', nargs='*')
args = parser.parse_args()
print(args)
print(args.n)
argparse模块使用_第7张图片
image.png

2) '+'和 ‘*’ 类似,所有当前命令行参数被聚集到一个列表中。另外,如果定位参数在命令行没有参数会产生一个错误信息。当“*”时,命令行没有任何定位参数,结果为一空列表;当+时,命令行没有任何定位参数会报错。对于可选参数,无论“*”还是“+”,命令行没有任何参数都是None,或者default指定的值。这个与我们的理解应该是一致的。下面的例子能说明这些问题。

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str', nargs='*')
parser.add_argument('char', nargs='+')
parser.add_argument('-n', nargs='*')
parser.add_argument('-a', nargs='+')
args = parser.parse_args()
print(args.str)
print(args.char)
print(args.n)
print(args.a) 
argparse模块使用_第8张图片
image.png

3) N:(一个整数)。命令行中的 N 个参数会被聚集到一个列表中

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('str', nargs=1)
parser.add_argument('char', nargs=2)
parser.add_argument('-n', nargs='*')
parser.add_argument('-a', nargs='+')
args = parser.parse_args()
print(args.str)
print(args.char)
print(args.n)
print(args.a)
argparse模块使用_第9张图片
image.png

上面多加了str4参数,代码就报错了,因为str4已经不能被分配了。

choice:用于界定参数的取值范围。下例中,age的范围是25-35,传入10这个值就会报错

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('-a', '--age', type=int, choices=range(25,35))
args = parser.parse_args()
print(args.age)
argparse模块使用_第10张图片
image.png

dest: parse_arg()之后add_argument中返回的变量名称。如下例,对于可选参数,首先指定可选参数名为-s,parse_arg()之后,可选参数的名称就会变为sex(此时尝试将print(args.sex)修改成print(args.s),执行时会报错),故下面使用时为args.sex。在命令窗口传参时不能使用sex,执行情况如下。

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('-a', '--age', type=int)
parser.add_argument('-s', dest='sex')
args = parser.parse_args()
print(args.age)
print(args.sex)
argparse模块使用_第11张图片
image.png

required:用来设置必选参数,设定后在命令行不使用会报错。以下代码-a就必须传参,否则会报错。

import argparse
parser = argparse.ArgumentParser(description = "give me a string")
parser.add_argument('-a', '--age', type=int, required=True)
parser.add_argument('-s', dest='sex')
args = parser.parse_args()
print(args.age)
print(args.sex)
argparse模块使用_第12张图片
image.png

metavar:在命令行所接参数的样式的示例。初看这句话不是很明白,操作一遍就知道了。

import argparse
parser = argparse.ArgumentParser(description = "I am a test")
parser.add_argument('-s', dest='sex', metavar='FEMALE')
args = parser.parse_args()
print(args.sex)
argparse模块使用_第13张图片
image.png

输入-h参数会显示-s后面输入的参数形式可以类似与FEMALE这样,所以对于初次使用这个代码的人来说,能够帮助他们知道-s可以输入什么类型的参数。

const:是针对于action中的’store_const’与’append_const’而出现。其实对于那些需要接值的参数,预先存储一个值,如果没有则取用这个值

action:用来给ArgumenParser对象判断如何处理命令行参数支持的操作如下:

1) ‘store’ - 默认的操作,用来存储参数的值。
2) ‘store_const’ - 适用于可选参数optional arguments,用来存储const关键字指定的值。如下例,对于可选参数,s存储的值为female,默认为1,在命令行执行时,如果不写–s则为默认的1,如果写上–s,则表示调用–s存储的female,这时只需写–s表示调用,后不跟任何参数。对于定位参数,命令行执行时什么都不写,会自动调用I am the string,因此default=you are right在这里无用。注意,这里const后接的值就代表了类型,如1表示int,如果是‘1’则表示string,无需再指定type。

import argparse
parser = argparse.ArgumentParser(description = "I am a test")
parser.add_argument('str', action='store_const', const='i am the string', default='you are right')
parser.add_argument('-s', action='store_const', const='female', default=1)
args = parser.parse_args()
print(args.str)
print(args.s)
argparse模块使用_第14张图片
image.png

3) append:存储一个列表,并且将每个参数值追加到列表中。在允许多次使用选项时很有用,仅适用于可选参数。

import argparse
parser = argparse.ArgumentParser(description = "I am a test")
parser.add_argument('-s', action='append')
args = parser.parse_args()
print(args.s)
argparse模块使用_第15张图片
image.png

4) append_const: 与store_const方法类似,只是这里的const值被放到一个列表里。

import argparse
parser = argparse.ArgumentParser(description = "I am a test")
parser.add_argument('str', action='append_const', const='i am the string')
parser.add_argument('-s', action='append_const', const='female')
args = parser.parse_args()
print(args.str)
print(args.s)
argparse模块使用_第16张图片
image.png

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