python标准库中的argparse用来解析命令行参数(ubuntu系统通过sys.argv)。
sys.argv:存储了从命令行传入python脚本中的变量,argv[0]存储的是python脚本的名字(如果是通过-c执行的脚本,那argv[0]存储的是string"-c",如果没有脚本名字传入python interpreter,那么argv[0]存储的是空字符串)。
基本结构:
1.创建解析器
2.添加变量
3.解析变量
parser=argparse.ArgumentParser()
parser.add_argument()
args=parser.parse_args()
参数:
ArgumentParser :
参数列表:
- description:如果调用termial的help,将展示出来,是对程序的注释
import argparse
parser=argparse.ArgumentParser(description="this is the test program")
parser.print_help()
- prog:默认的时候ArgumentParser使用sys.argv[0]来作为help展示时候的程序名,当使用prog的时候会改变help展示的程序值:
import argparse
parser=argparse.ArgumentParser(prog="changed")
parser.print_help()
add_argument:
通过命令行向程序传递的变量有两种形式,一种是optional,一种是positional
positional:
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("test",help="this is a positional argument")
args=parser.parse_args()
print(args.test)
测试结果:
optional:
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("--test",help="this is optional argument")
args=parser.parse_args()
if args.test:
print("optional_argument")
执行结果:
注意这里optional变量没有被赋值的时候,程序可以正常运行,这时optional变量的值为None,当optional变量被赋值后,程序会输出这个变量的值
同时optional变量可以有省略形式,这时使用一个单引号和一个字母:
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("-t","--test",help="this is optional argument")
args=parser.parse_args()
if args.test:
print("optional_argument")
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
参数列表:
-
name/flags:添加的变量的名字,也就是在add_argument()后双引号内的值,optional和positional这两种变量通过"-"来进行区分。
-
help:string类型,包含对变量的一个简单的描述,当用户在terminal调用help的时候,会显示在terminal中。
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("test",help="this is the help message")
parser.parse_args()
- default:所有的optional和部分的positional(当nargs为?或*的时候)类型的变量在命令行都可以省略,这个时候赋给变量default的值。
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("--test",default=42)
args=parser.parse_args()
print(args.test)
- type:argumentparser默认将terminal中的变量赋值为string类型,type会进行一步类型转换。
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("i",type=int)
parser.add_argument("s")
args=parser.parse_args()
print(type(args.i))
print(type(args.s))
-
dest:变量别名
当调用parser.add_argument()的时候,就是在为parser对象附加属性,这个属性的名字就由dest关键子决定,对于positional类型的变量,dest默认为add_argument()方法传入的第一个字符串,对于optional类型的变量,如果传入长字符串,dest的值是"–XXX"类型的字符串去掉"–“如果传入短字符串,dest的值是”-X"类型的字符串取消"-",所有的在字符串中间的"-“都会被转化为”_" -
nargs:将部分传入变量打包成一个list返回。
可选值总共有五种:
1.argparse.REMAINDER
这时所有剩余的命令行变量都会被聚集进入一个list。
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('--foo')
>>> parser.add_argument('command')
>>> parser.add_argument('args', nargs=argparse.REMAINDER)
>>> print(parser.parse_args('--foo B cmd --arg1 XX ZZ'.split()))
Namespace(args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')
parse_args():
将传入的string类型变量转化为一个namespace中的属性值,并返回这个namespace。
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> args = parser.parse_args(['--foo', 'BAR'])
>>> vars(args)
{'foo': 'BAR'}
参考:
https://docs.python.org/3.7/library/argparse.html#module-argparse