文章目录
python中实现参数解析主要有两种方式,argparse
& sys.argv
。
前者适合复杂场景,支持设置命令提示信息;
后者适合简单场景,也不支持设置命令提示信息。
1.argparse
对于下面测试代码:
import argparse
parser = argparse.ArgumentParser(description='script desc ...')
parser.add_argument('a', type=int, help='help msg1', metavar='arg1')
parser.add_argument('b', type=str, default='1', help='help msg2', metavar='arg2')
parser.add_argument('-c', '--c_long', type=int, default=1, help='help msg3', metavar='arg3')
parser.add_argument('-d', '--d_long', type=str, default='1', help='help msg4', metavar='arg4')
args = parser.parse_args()
print(args)
if args.a:
print(args.a, type(args.a))
if args.b:
print(args.b, type(args.b))
if args.c_long:
print(args.c_long, type(args.c_long))
if args.d_long:
print(args.d_long, type(args.d_long))
控制台:
sh-3.2$ ../.venv/bin/python ./test_argparse.py 1 2 -c 3 -d 4
Namespace(a=1, b='2', c_long=3, d_long='4')
1 <class 'int'>
2 <class 'str'>
3 <class 'int'>
4 <class 'str'>
sh-3.2$ ../.venv/bin/python ./test_argparse.py -h
usage: test_argparse.py [-h] [-c arg3] [-d arg4] arg1 arg2
script desc ...
positional arguments:
arg1 help msg1
arg2 help msg2
options:
-h, --help show this help message and exit
-c arg3, --c_long arg3
help msg3
-d arg4, --d_long arg4
help msg4
几个注意点:
1.位置参数在传递时保持在脚本中的相对前后顺序就行,对具体位置没有强制要求,不可省略。
2.可选参数-x
、--xxx
传递值时对位置也没有要求,可省略。
3.add_argument
方法中type指定的类型,传入的参数值必须可解释为指定的类型,脚本内部也会将参数值自动转换为指定的类型。
4.metavar
参数值在查看命令帮助信息时充当参数值占位符,对代码本身无影响。
5.对于带-
的可选参数,如果长短参数名都存在,属性名只能通过长参数名获取。只存在一个时,通过存在的那个参数名获取。
2.sys.argv
import sys
if __name__ == '__main__':
print(sys.argv, type(sys.argv))
sh-3.2$ ../.venv/bin/python ./test_argparse.py 1 2
['./test_argparse.py', '1', '2'] <class 'list'>
这种方式接收返回的是一个参数列表,解析时参数值要和传入的顺序一一对应,注意第一个值是调用的脚本名,接收到的参数值都会当做字符串看待。