python argparse模块
Posted 一只小小寄居蟹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python argparse模块相关的知识,希望对你有一定的参考价值。
argparse模块
argparse是python标准库里面用来处理命令行参数的库。
基本用法
import argparse parser = argparse.ArgumentParser() parser.parse_args()
输出结果
XXX>python arg_example.py XXX>python arg_example.py -h usage: arg_example.py [-h] optional arguments: -h, --help show this help message and exit XXX>python arg_example.py a usage: arg_example.py [-h] arg_example.py: error: unrecognized arguments: a XXX>
- 第一个没有任何输出和出错
- 第二个测试为打印帮助信息,argparse会自动生成帮助文档
- 第三个测试为未定义的a参数,会出错
positional arguments
positional arguments为英文定义,中文名叫有翻译为定位参数的,用法是不用带-就可用
import argparse parser = argparse.ArgumentParser() parser.add_argument("echo") args = parser.parse_args() print (args.echo) 输出结果: XXX>python arg_example.py a a XXX>python arg_example.py echo echo XXX>python arg_example.py usage: arg_example.py [-h] echo arg_example.py: error: the following arguments are required: echo
定义了一个叫echo
的参数,默认必选
- 第一个测试为正常用法,回显了输入字符串a
- 第二个测试为不带参数,由于
echo
参数为空,所以报错,并给出用法(usage)和错误信息
optional arguments
中文名叫可选参数,有两种方式:
- 一种是通过一个
-
来指定的短参数,如-h
; - 一种是通过
--
来指定的长参数,如--help
import argparse parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbo", help="verbo usage") args = parser.parse_args() if args.verbo: print ("verbo turned on %s" % args.verbo) 输出结果: XXX>python arg_example.py -v hello verbo turned on hello XXX>python arg_example.py --verbo h ello verbo turned on hello XXX>python arg_example.py -h usage: arg_example.py [-h] [-v VERBO] optional arguments: -h, --help show this help message and exit -v VERBO, --verbo VERBO verbo usage XXX>python arg_example.py a usage: arg_example.py [-h] [-v VERBO] arg_example.py: error: unrecognized arguments: a
定义了可选参数-v
或--verbo
,通过解析后,其值保存在args.verbo
变量中
- 测试1中,通过-v来指定参数值
- 测试2中,通过--verbos来指定参数值
- 测试3中,通过-h来打印帮助信息
- 测试4中,没有给-v指定参数值,所以会报错
action=‘store_true‘
通过定义参数时指定action="store_true",可以像
-h
那样,不需要指定参数值
import argparse parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbo", help="verbo usage", action="store_true") args = parser.parse_args() if args.verbo: print("verbo turned on %s" % args.verbo) 输出结果: XXX>python arg_example.py -v verbo turned on True XXX>python arg_example.py -h usage: arg_example.py [-h] [-v] optional arguments: -h, --help show this help message and exit -v, --verbo verbo usage XXX>python arg_example.py -v hello usage: arg_example.py [-h] [-v] arg_example.py: error: unrecognized arguments: hello
- 测试1中,-v没有指定任何参数也可,其实存的是True和False,如果出现,则其值为True,否则为False
- 测试2中,通过-h来打印帮助信息
- 测试3中,-v指定参数值,会报错,因为指定Ture或False
argparse配置参数
可以配置的参数有以下:
- dest: 可以决定解析后,取值时的属性名, 尤其适于有多个等价参数. 不指定时就是选项不加-的字符串.
- type: 选项的值类型,值的默认类型是字符串, 这里将值指定为其他类型.
- default: 缺省值. 没有设置缺省值的为None.
- help: 选项中有 -h 时打印的 help 信息.
- metavar: 表示显示到 help 中选项的默认值;
- choices: 当 type 设置为 choices 时,需要设置此值.
action: 用于控制对选项和参数的处理,像无参数选项处理,可以设置为以下几种字符串:
- "store": 储存值到 dest 指定的属性,强制要求后面提供参数;
- "store_true": 当使用该选项时,后面的 dest 将设置为 true, 不跟参数.
- "store_false": 当使用该选项时,后面的 dest 将设置为 false. 常配合另一个 "store_true" 的选项使用同一个 dest 时使用. 不跟参数.
- "append": 储存值到 dest 指定的属性,并且是以数组的形式, 必须跟参数.
- "store_const": 用来存储参数为 const 设置的值到 dest 指定的属性当中.常用于 dest 为同名2个以上选项时的处理. 不跟参数.
- "append_const": 用来存储参数为 const 设置的数组到 dest 指定的属性当中. 不跟参数.
- "count": 使用后将给储存值到 dest 指定的属性值加1,可以统计参数中出现次数.用途不大. 不跟参数.
- "callback": 后面指定回调函数名(不加括号),会将相应opt和args传给回调函数.
- "help", "version": 对应为帮助和版本. 要另外自己设计时使用.
default:
import argparse parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbo", help="verbo usage" ,default=1) args = parser.parse_args() if args.verbo: print("verbo turned on %s" % args.verbo)
type
import argparse parser = argparse.ArgumentParser() parser.add_argument(‘-x‘, type=int, help="square") args = parser.parse_args() answer = args.x ** 2 print(answer)
choices
import argparse parser = argparse.ArgumentParser(description="calculate X to the power of Y") parser.add_argument("square", type=int, help="display a square of a given number") parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], default=1, help="increase output verbosity") args = parser.parse_args() answer = args.square**2 if args.verbosity == 2: print("the square of {} equals {}".format(args.square, answer)) elif args.verbosity == 1: print("{}^2 == {}".format(args.square, answer)) else: print(answer)
输出结果
XXX>python arg_example.py 3 -v 1 3^2 == 9 XXX>python arg_example.py 3 -v 2 the square of 3 equals 9 XXX>python arg_example.py 3 3^2 == 9 XXX>python arg_example.py usage: arg_example.py [-h] [-v {0,1,2}] square arg_example.py: error: the following arguments are required: square XXX>python arg_example.py -h usage: arg_example.py [-h] [-v {0,1,2}] square calculate X to the power of Y positional arguments: square display a square of a given number optional arguments: -h, --help show this help message and exit -v {0,1,2}, --verbosity {0,1,2} increase output verbosity
案例ftp客户端命令行
import argparse parser = argparse.ArgumentParser( description="ftp客户端,使用-S 127.0.0.1 -P 9988 -u hh -p 123") parser.add_argument("-s", "--server", type=str, default=‘127.0.0.1‘, dest="server", help="ftp server ip_addr") parser.add_argument("-P", "--port", type=int, dest="port", help="ftp server port") parser.add_argument("-u", "--username", type=str, choices=[‘alex‘, ‘egon‘, ‘eva‘], dest="username", help="username info") parser.add_argument("-p", "--password", dest="password", help="password info") args = parser.parse_args() print(‘server:{} port:{} username:{} password:{}‘.format(args.server, args.port, args.username, args.password))
输出结果
XXX>python arg_example.py -h usage: arg_example.py [-h] [-s SERVER] [-P SERVER] [-u {alex,egon,eva}] [-p PASSWORD] ftp客户端,使用-S 127.0.0.1 -P 9988 -u hh -p 123 optional arguments: -h, --help show this help message and exit -s SERVER, --server SERVER ftp server ip_addr -P SERVER, --port SERVER ftp server port -u {alex,egon,eva}, --username {alex,egon,eva} username info -p PASSWORD, --password PASSWORD password info XXX>python arg_example.py -s 127.0.0.1 -P 9988 -u en -p 123 usage: arg_example.py [-h] [-s SERVER] [-P PORT] [-u {alex,egon,eva}] [-p PASSWORD] arg_example.py: error: argument -u/--username: invalid choice: ‘en‘ (choose from ‘alex‘, ‘egon‘, ‘eva‘) XXX>python arg_example.py -s 127.0.0.1 -P 9988 -u alex -p 123 server:127.0.0.1 port:9988 username:alex password:123 XXX>python arg_example.py -s 127.0.0.1 -P 9988 -u alex -p 123456 server:127.0.0.1 port:9988 username:alex password:123456
参考http://yarving.historytale.com/
以上是关于python argparse模块的主要内容,如果未能解决你的问题,请参考以下文章