欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python命令行解析argparse使用语法介绍

程序员文章站 2022-07-08 07:57:47
python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块。argparse从python 2.7开始被加入到标准库中,所以...

python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块。argparse从python 2.7开始被加入到标准库中,所以如果你的python版本还在2.7以下,那么需要先手动安装。

基本使用

import argparse
parser=argparse.ArgumentParser()
parser.add_argument("echo",help="echo the string")
args=parser.parse_args()
print args.echo

参数介绍

上面这个例子是最简单的一个使用例子,功能是把你的输入参数打印到屏幕 。不过对于基本的使用需求,这几行代码应该就已经够用,更加高级的用法可以参考官方文档。

下面介绍下例子代码。

1、导入argparse模块

import argparse

2、创建解析器对象ArgumentParser,可以添加参数。

parser=argparse.ArgumentParser(description="This is a example program ")

description:描述程序

add_help:默认是True,可以设置False禁用

3、add_argument()方法,用来指定程序需要接受的命令参数

定位参数:

parser.add_argument("echo",help="echo the string")

可选参数:

parser.add_argument("--verbosity", help="increase output verbosity")

在执行程序的时候,定位参数必选,可选参数可选。

add_argument()常用的参数

dest:如果提供dest,例如dest=”a”,那么可以通过args.a访问该参数

default:设置参数的默认值

action:参数出发的动作

store:保存参数,默认

store_const:保存一个被定义为参数规格一部分的值(常量),而不是一个来自参数解析而来的值。

store_ture/store_false:保存相应的布尔值

append:将值保存在一个列表中。

append_const:将一个定义在参数规格中的值(常量)保存在一个列表中。

count:参数出现的次数

parser.add_argument(“-v”, “–verbosity”, action=”count”, default=0, help=”increase output verbosity”)

version:打印程序版本信息

type:把从命令行输入的结果转成设置的类型

choice:允许的参数值

parser.add_argument(“-v”, “–verbosity”, type=int, choices=[0, 1, 2], help=”increase output verbosity”)

help:参数命令的介绍

add_argument()常用参数使用方法介绍

add_argument:读入命令行参数,该调用有多个参数

ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

name or flags:是必须的参数,该参数接受选项参数或者是位置参数(一串文件名)

parser.add_argument('-f', '--foo')    #选项参数  
parser.add_argument('bar')        #位置参数  

nargs: 当选项后接受多个或者0个参数时需要这个来指定
比如-u选项接受2个参数

>>> parser.add_argument('-u',nargs=2)  
>>> parser.parse_args('-u a b'.split())  
Namespace(u=['a', 'b'])  

当选项接受1个或者不需要参数时指定nargs=’?’,当没有参数时,会从default中取值。对于选项参数有一个额外的情况,就是出现选项而后面没有跟具体参数,那么会从const中取值

>>> parser.add_argument('-u',nargs='?')  
>>> parser.parse_args(''.split())  
Namespace(u=None)  
>>> parser.parse_args('-u a'.split())  
Namespace(u='a')  

>>> parser.add_argument('-u',nargs='?',default='d')  
>>> parser.add_argument('A',nargs='?',default='e')  
>>> parser.parse_args(''.split())  
Namespace(A='e', u='d')  
>>> parser.parse_args('-u'.split())  
Namespace(A='e', u=None)  

>>> parser.add_argument('-u',nargs='?',default='d',const='s')  
>>> parser.add_argument('A',nargs='?',default='T',const='P')  
>>> parser.parse_args(''.split())  
Namespace(A='T', u='d')  
>>> parser.parse_args('-u'.split())  
Namespace(A='T', u='s')  
>>> parser.parse_args('A'.split())  
Namespace(A='A', u='d')  

而对于后面需要跟多个参数的情况(–foo a1 a2 a3…),则需要设置nargs=’*’

>>> parser.add_argument('-u',nargs='*')  
>>> parser.parse_args('-u a b c d e'.split())  
Namespace(u=['a', 'b', 'c', 'd', 'e'])  

nargs=’+’也和nargs=’*’一样,但是有一个区别当’+’时少于1个参数(没有参数)位置参数会报错误

>>> parser.add_argument('u',nargs='+')  
>>> parser.parse_args(''.split())  
usage: [-h] u [u ...]  
: error: too few arguments  

而‘*’会使用默认值

>>> parser.add_argument('u',nargs='*',default='e')  
>>> parser.parse_args(''.split())  
Namespace(u='e')  

default: 当参数需要默认值时,由这个参数指定,默认为None,当default=argparse.SUPPRESS时,不使用任何值

>>> parser.add_argument('u',nargs='*',default=argparse.SUPPRESS)  
>>> parser.parse_args(''.split())  
Namespace()  

type: 使用这个参数,转换输入参数的具体类型,这个参数可以关联到某个自定义的处理函数,这种函数通常用来检查值的范围,以及合法性

>>> parser.add_argument('-u',type=int)  
>>> parser.add_argument('f',type=file)  
>>> parser.parse_args('-u 2 aa'.split())  
Namespace(f=, u=2)  

choices: 这个参数用来检查输入参数的范围

>>> parser.add_argument('-u',type=int,choices=[1,3,5])  
>>> parser.parse_args('-u 3'.split())  
Namespace(u=3)  
>>> parser.parse_args('-u 4'.split())  
usage: [-h] [-u {1,3,5}]  
: error: argument -u: invalid choice: 4 (choose from 1, 3, 5)  

required: 当某个选项指定需要在命令中出现的时候用这个参数

>>> parser.add_argument('-u',required=True)  
>>> parser.parse_args(''.split())  
usage: [-h] -u U  
: error: argument -u is required  

help: 使用这个参数描述选项作用

>>> parser.add_argument('-u',required=True,default='wowo',help='%(prog)s for test sth(default: %(default)s)')  
>>> parser.print_help()   usage: [-h] -u U  
optional arguments:  
  -h, --help  show this help message and exit  
  -u U        for test sth(default: wowo)  

dest: 这个参数相当于把位置或者选项关联到一个特定的名字

>>> parser.add_argument('--str',nargs='*')  
>>> parser.parse_args('--str a b c'.split())  
Namespace(str=['a', 'b', 'c'])  

>>> parser.add_argument('--str',nargs='*',dest='myname')  
>>> parser.parse_args('--str a b c'.split())  
Namespace(myname=['a', 'b', 'c']) 

metavar: 这个参数用于help 信息输出中

>>> parser.add_argument('--str',nargs='*',metavar='AAA')  
>>> parser.print_help()  
usage: [-h] [--str [AAA [AAA ...]]]  

optional arguments:  
  -h, --help            show this help message and exit  
  --str [AAA [AAA ...]]  

>>> parser.add_argument('str',nargs='*',metavar='AAA')  
>>> parser.print_help()  
usage: [-h] [AAA [AAA ...]]  

positional arguments:  
  AAA  

optional arguments:  
  -h, --help  show this help message and exit