python argparse nargs_Python-argparse-命令行与参数解析

Python 命令行与参数解析方法有很多工具,本文使用python 自带的argparse 来说明python 如何进行命令行解析。

什么是命令行与参数解析?

通俗来说,命令行与参数解析就是当你输入cmd 打开dos 交互界面时候,启动程序要进行的参数给定。比如在dos 界面输入:

python openPythonFile.py "a" -b "number"

其中的"a", -b 等就是命令行与参数解析要做的事。

~~这在windows 系统下用处不是特别大,因为windows 下各种编译器,你根本不需要在dos 界面下去执行python 脚本。但是在linux 系统下,你几乎要总是考虑命令行解析。~~

和操作系统无关,就是设计程序在运行时必须给定某些额外参数才能运行,也就是如果设置了命令行参数解析,那么各种编译器按F5 是无法直接运行程序的。用途,就是不能随便就能运行脚本,可以达到一定程度上的安全功能。

Python 命令行与参数解析使用步骤

创建解析

添加参数

解析参数

下面通过一个例子进行简单创建:

import argparse

# 创建解析步骤

parser = argparse.ArgumentParser(description='Process some integers.')

# 添加参数步骤

parser.add_argument('integers', metavar='N', type=int, nargs='+',

help='an integer for the accumulator')

parser.add_argument('--sum', dest='accumulate', action='store_const',

const=sum, default=max,

help='sum the integers')

# 解析参数步骤

args = parser.parse_args()

print(args.accumulate(args.integers))

在dos 界面执行:

python 命令行与参数解析.py -h

运行结果:

usage: 命令行与参数解析.py [-h] [--sum] N [N ...]

Process some integers.

positional arguments:

N an integer for the accumulator

optional arguments:

-h, --help show this help message and exit

--sum sum the integers

每个步骤的参数设定

创建解析过程参数设定

ArgumentParser(prog='', usage=None, description='Process some integers.', version=None, formatter_class=, conflict_handler='error', add_help=True)

# 例如

parser = argparse.ArgumentParser(description='Process some integers.')

prog(不建议更改)

程序名称(默认sys.argv[0],默认为函数文件名),设置prog 则改变这一默认(仍使用上面那个实例):

# 变更参数

parser = argparse.ArgumentParser(prog='sum or max',description='Process some integers.')

#运行结果

#原始

usage: 命令行与参数解析.py [-h] [--sum] N [N ...]

#变更后

usage: sum or max [-h] [--sum] N [N ...]

usage(不建议更改)

用于描述程序的使用用法(默认为添加到解析器中的参数)。在使用python xxx.py -h之后将出现。看例子:

# 变更参数

parser = argparse.ArgumentParser(usage='python 命令行与参数解析.py arguments',description='Process some integers.')

#运行结果

#原始

usage: 命令行与参数解析.py [-h] [--sum] N [N ...]

#变更后

usage: python 命令行与参数解析.py arguments

description

描述文件,上面实例已体现。

epilog

参数选项帮助后的显示文本。看例子:

# 变更参数

epilog='And What can I help U?'

# 运行结果

optional arguments:

-h, --help show this help message and exit

--sum sum the intergers

And What can I help U?

parents

共享同一个父类解析器,由ArgumentParser对象组成的列表,它们的arguments选项会被包含到新ArgumentParser对象中,类似于继承。

formatter_class(没必要改变)

help信息输出格式共有三种形式:

argparse.RawDescriptionHelpFormatter:以输入格式输出,并不将其合并为一行

argparse.RawTextHelpFormatter:所有信息以输入格式输出,并不将其合并为一行

argparse.ArgumentDefaultsHelpFormatter:输出参数的defalut值

prefix_chars(不建议改变)

参数前缀,默认为'-'。前缀字符,放在文件名之前。当参数过多时,可以将参数放在文件中读取。看例子:

>>> with open('args.txt', 'w') as fp:

... fp.write('-f\nbar')

>>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@')

>>> parser.add_argument('-f')

>>> parser.parse_args(['-f', 'tmp', '@args.txt'])

Namespace(f='bar')

例子中parser.parse_args(['-f', 'foo', '@args.txt'])解析时会从文件args.txt 读取,相当于 ['-f', 'foo', '-f', 'bar']

conflict_handler(最好不要修改)

解决冲突的策略,默认情况下冲突会发生错误。

>>> parser = argparse.ArgumentParser(prog='PROG')

>>> parser.add_argument('-f', '--foo', help='old foo help')

>>> parser.add_argument('--foo', help='new foo help')

Traceback (most recent call last):

..

ArgumentError: argument --foo: conflicting option string(s): --foo

add_help(不建议修改)

是否增加-h/-help选项 (默认为True),一般help信息都是必须的。设为False时,help信息里面不再显示-h –help信息。

argument_default

设置一个全局的选项的缺省值,一般每个选项单独设置,基本没用。缺省为:None。

添加参数过程参数设定

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

# 例如

parser.add_argument('intergers',metavar='N',type=int,nargs='+',help='an interger for the accumulator')

parser.add_argument('--sum',dest='accumulate',action='store_const',const=sum,default=max,help='sum the intergers (default:find the max)')

知识点:

+ 每一个参数都要单独设置,就像上面例子,需要两个参数就用两个add_argument 。

+ 从上面的实例中也可以看到,参数分为两种:positional arguments 和optional arguments 。

+ positional arguments 参数按照参数设置的先后顺序对应读取,实际中不用设置参数名,必须有序设计。

+ optional arguments 参数在使用时必须使用参数名,然后是参数具体数值,设置可以是无序的。

+ 程序根据prefix_chars(默认"-")自动识别positional arguments 还是optional arguments。

+ prefix_chars 分为缩写(比如"-h")和对应的全程(比如"--help"),可以同时设置

参数设定详细解释:

+ name or flag

optional arguments以'-'为前缀的参数,其他的为positional arguments。上面例子已经有体现如何设定。

action

命令行参数的操作,操作的形式有以下几种:store:仅仅存储参数的值(默认)

storeconst:存储const关键字指定的值

parser.add_argument('-t',action='store_const',const=7)store_true/store_false:值为True/False

parser.add_argument('-t',action='store_truet')append:值追加到list中(普通的store 和append 不是一样的?)

append_const: 存为列表,会根据const关键参数进行添加

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('--str', dest='types', action='append_const', const=str)

>>> parser.add_argument('--int', dest='types', action='append_const', const=int)

>>> parser.parse_args('--str --int --str --int'.split())

Namespace(l=None, types=[, , , ])count

统计参数出现的次数

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('--counte', '-c', action='count')

>>> parser.parse_args('-cccc'.split())

Namespace(counte=4)help

显示help信息

version

显示version信息

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('--version', action='version', version='version 2.0')

>>> parser.parse_args(['--version'])

version 2.0nrgs

参数的数量,有如下几个设定:

N:N个参数

?:首先从命令行中获取,若没有则从const中获取,仍然没有则从default中获取

*/+:任意多个参数

const

保存为一个常量,上面在讲action 行为时已经解释用法。

default

默认值

type

参数类型,默认为str

choices

设置参数值的范围,如果choices中的类型不是字符串,记得指定type。看例子:

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('x', type=int, choices=range(1, 4))

>>> parser.parse_args(['3'])

Namespace(x=3)

>>> parser.parse_args(['4'])

usage: [-h] {1,2,3}

: error: argument x: invalid choice: 4 (choose from 1, 2, 3)

required

是否为必选参数,默认为True

desk

参数别名,看例子:

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('--foo', dest='f_name')

>>> parser.parse_args('--foo XXX'.split())

Namespace(f_name='XXX')

help

参数的帮助信息,即解释信息

metavar

帮助信息中显示的参数名称

解析参数过程参数设定

>>> parser = argparse.ArgumentParser()

>>> parser.add_argument('x')

>>> a = parser.parse_args(['1'])

>>> a

Namespace(x='1')

>>> type(a)

>>> a.x

'1'

一个完整的例子filename = argv_argparse.py

import sys

import argparse

def cmd():

args = argparse.ArgumentParser(description = 'Personal Information ',epilog = 'Information end ')

#必写属性,第一位

args.add_argument("name", type = str, help = "Your name")

#必写属性,第二位

args.add_argument("birth", type = str, help = "birthday")

#可选属性,默认为None

args.add_argument("-r",'--race', type = str, dest = "race", help = u"民族")

#可选属性,默认为0,范围必须在0~150

args.add_argument("-a", "--age", type = int, dest = "age", help = "Your age", default = 0, choices=range(150))

#可选属性,默认为male

args.add_argument('-s',"--sex", type = str, dest = "sex", help = 'Your sex', default = 'male', choices=['male', 'female'])

#可选属性,默认为None,-p后可接多个参数

args.add_argument("-p","--parent",type = str, dest = 'parent', help = "Your parent", default = "None", nargs = '*')

#可选属性,默认为None,-o后可接多个参数

args.add_argument("-o","--other", type = str, dest = 'other', help = "other Information",required = False,nargs = '*')

args = args.parse_args()#返回一个命名空间,如果想要使用变量,可用args.attr

print "argparse.args=",args,type(args)

print 'name =%s'%args.name

d = args.__dict__

for key,value in d.iteritems():

print '%s=%s'%(key,value)

if __name__=="__main__":

cmd()

dos输入命令示例:

python argv_argparse.py -h

python argv_argparse.py xiaoming 1991.11.11

python argv_argparse.py xiaoming 1991.11.11 -p xiaohong xiaohei -a 25 -r han -s female -o 1 2 3 4 5 6

你可能感兴趣的:(python,argparse,nargs)