在shell脚本中,若脚本带参数,则在脚本中使用$1、$2...等引用,

在python中,也可以定义类似的引用参数,可以为必选项也可以可选项。

基本用法如下三种:

1、必选项(位置参数)

import argparse

p = argparse.ArgumentParser()
p.add_argument('var',help='Required parameters')
args = p.parse_args()
if args.var:
print(args.var)

若把此代码保存为arg.py,则执行的时候必须带一个参数,否则报错:

python arg.py hello,world

可以使用如下命令查看:

D:\MyTestProject\MyLearn>python ArgParseLearn.py -h
usage: ArgParseLearn.py [-h] var positional arguments:
var Required parameters optional arguments:
-h, --help show this help message and exit

也可以把可选项设置为必选项,在add_argument中设置required为True就可以了,如下设置:

p.add_argument('-p',help='Optional parameters',required = True)

2、可选项一

import argparse

p = argparse.ArgumentParser()
p.add_argument('-p',help='Optional parameters')
args = p.parse_args()
if args.p:
print(args.p)
else:
print('no var')

若把此代码保存为arg.py,则执行的时候可带参数也可不带:

python arg.py

python arg.py hello,world

3、可选项二

import argparse

p = argparse.ArgumentParser()
p.add_argument('--parameter',help='Optional parameters')
args = p.parse_args()
if args.parameter:
print(args.parameter)
else:
print('no parameter')

若把此代码保存为arg.py,则执行的时候可带参数也可不带:

python arg.py

python arg.py hello,world

以上为3种入参方法,其实add_argument有很多参数可供选择:

name - 选项字符串的名字或者列表,例如var、-p等,可以使用-h查看到。

一般来说,单字母用-,多字母使用--,如果-p,-v,--version,--pass等,如果不使用-或者--,默认这个参数必须填写,类似加了required = True

action - 基本动作类型,当前默认有如下一些类型:

store  --这是默认类型,即存储值

store_const  ---保存const参数的值,此时执行文件只带参数,不带变量,如下:

import argparse

p = argparse.ArgumentParser()
p.add_argument('-p',help='Optional parameters',action = 'store_const',const = '')
args = p.parse_args()
print(args.p)

如上代码保存为arg.py,应该这么执行:python arg.py -p

此时打印出来的值为const的值78

store_true和store_false  ---对应布尔值,True和False

append   ---此选项把参数对应的值使用list集合起来,如下:

import argparse

p = argparse.ArgumentParser()
p.add_argument('-p',help='Optional parameters',action = 'append')
args = p.parse_args()
print(args.p)

保存为arg.py,则可以如下执行:python arg.py -p 1 -p 2 -p 89

执行结果为['1', '2', '89']

append_const  ---这个必须有参数const,把const集合起来

count  ----查看参数出现几次

help  ---默认会自动存在的

version  ---必须配合version参数,用法如下:

import argparse

p = argparse.ArgumentParser()
p.add_argument('-v',help='Optional parameters',action = 'version',version = '1.15.1')
args = p.parse_args()
print(args.p)

保存为arg.py,执行python arg.py -v则显示version参数的值

nargs - 对应参数应该获取的变量个数,大于1个变量用list来表示。一般取值有如下几个:

N  数值int型,即nargs=3,nargs=10等

?  表示0个或者1个参数,如nargs = '?'

*  表示0个或者多个参数,如nargs = '*'
+  表示1个或者多个参数,如nargs = '+'

const - 某些action和nargs选项要求的常数值。如果有这个参数,则使用脚本时不需要追加变量

default - 如果命令行中没有出现该参数时该参数的默认值。

type - 命令行参数应该被转换成的类型。支持以下类型:

str,int,float,complex,file。如果没有此参数,默认为str类型

choices - 参数可允许的值的一个容器(列表)。

required - 该命令行选项是否可以省略(只针对可选参数)。

help - 参数的简短描述。

metavar - 参数在帮助信息中的名字,即类似起一个别名。如下:

import argparse

p = argparse.ArgumentParser()
p.add_argument('p',help='Optional parameters',metavar = 'TP')
p.add_argument('--gogo',help='Optional parameters',nargs = 2,metavar = ('new','old'))
args = p.parse_args() print(args.p)

保存为arg.py后执行python arg.py -h,可以看到名称不是p,而是TP:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -h
usage: temp.py [-h] TP positional arguments:
TP Optional parameters optional arguments:
-h, --help show this help message and exit
 --gogo new old  Optional parameters

dest - 给parse_args()返回的对象要添加的属性名称。即给namespace里面的参数起个别名,作用同metavar(只有非位置参数才可以用dest),如下:

import argparse

p = argparse.ArgumentParser()
p.add_argument('-p',help='Optional parameters',metavar = 'TP',dest = 'paaa')
args = p.parse_args()
print(args)

保存为arg.py,然后执行python arg.py -h查看如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -h
usage: temp.py [-h] [-p TP] optional arguments:
-h, --help show this help message and exit
-p TP Optional parameters

执行python arg.py -p yy,结果如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python temp.py -p 5
Namespace(paaa='')

对于ArgumentParser类中也有许多参数,查看__ini__如下:

    def __init__(self,
prog=None,
usage=None,
description=None,
epilog=None,
parents=[],
formatter_class=HelpFormatter,
prefix_chars='-',
fromfile_prefix_chars=None,
argument_default=None,
conflict_handler='error',
add_help=True,
allow_abbrev=True):

prog ---程序名称,默认为sys.argv[0]

usage ---程序使用方法介绍,放在帮助的最前面

description ---描述信息,在usage之后,参数之前

epilog ---帮助信息中参数之后的文本信息

parents ---ArgumentParser 对象的一个列表,如果在列表中,会把parents包含的对象的所有参数带过来,如下示例:

import argparse

#父参数
p_parser = argparse.ArgumentParser(add_help=False)
p_parser.add_argument('-f')
#子参数并使用父参数
son = argparse.ArgumentParser(parents = [p_parser])
son.add_argument('-p')
sonargs = son.parse_args()
print(sonargs)

把上述代码保存为arg.py,执行python arg.py -p aa -f body,结果如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -p aa -f body
Namespace(f='body', p='aa')

可以看到父参数也可以在这里接收到对应的值

这里要注意的是,若作为父参数,必须要设置add_help = False

formatter_class = HelpFormatter ---格式化的帮助信息,可以自定义

prefix_chars = '-'  ----可选参数的前缀,默认是'-'

fromfile_prefix_chars = None  ---读取额外文件的字符集前缀,如下所示:

import argparse

p = argparse.ArgumentParser(fromfile_prefix_chars = '@')
p.add_argument('-f')
args = p.parse_args()
print(args)
print(args.f)

保存为arg.py,在arg.py同目录下创建一个文件a.txt并输入一行:-f mylife

然后在命令行中执行python arg.py @a.txt,接入如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py @a.txt
Namespace(f=' mylife')
mylife

argument_default = None ---参数的默认值,默认None

conflict_handler  ---解决参数冲突,如下可以使用新参数顶替就参数:

import argparse

p = argparse.ArgumentParser(conflict_handler = 'resolve')
p.add_argument('-f','--fule',help = 'old')
p.add_argument('--fule',help = 'new')
print(p.parse_args())

保存如上代码为arg.py,执行python arg.py -h,结果如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py -h
usage: temp.py [-h] [-f FULE] [--fule FULE] optional arguments:
-h, --help show this help message and exit
-f FULE old
--fule FULE new

再执行python arg.py,结果如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py
Namespace(fule=None)

发现只有一个参数fule,当我们带参数执行时,若带-f则fule参数也可以取得值,若带-f和--fule,此时fule参数值为--fule的参数值。

add_help = True  ---默认增加-h/--help给解释器,若为False则不会自动添加-h/--help选项

allow_abbrev = True ---允许参数简写,默认是允许的,如下:

import argparse

p = argparse.ArgumentParser(allow_abbrev = True)
p.add_argument('--fule',help = 'fule')
p.add_argument('--file',help = 'file')
args = p.parse_args()
print(args)

保存为arg.py,在命令行中执行python arg.py --fu c,执行结果如下:

D:\PycharmProjects\untitled\MyTestProject\MyLearn>python arg.py --fu c
Namespace(file=None, fule='c')

可以看到fule参数获取到了值,如果allow_abbrev = False,则会报错

python之定义参数模块argparse(一)基本使用的更多相关文章

  1. python之定义参数模块argparse(二)高级使用 --传参为函数的实现

    我们在文章python之定义参数模块argparse的基本使用中介绍了argparse模块的基本使用方法 当前传入的参数只能是int.str.float.comlex类型,不能为函数,这有点不方便,但 ...

  2. python命令行解析模块--argparse

    python命令行解析模块--argparse 目录 简介 详解ArgumentParser方法 详解add_argument方法 参考文档: https://www.jianshu.com/p/aa ...

  3. Python 命令行解析模块 —— argparse

    argparse是python标准库里面用来处理命令行参数的库,基本使用步骤如下: 1.import argparse    导入模块 2.parser = argparse.ArgumentPars ...

  4. Python学习笔记(四)Python函数的参数

    Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...

  5. python命令行参数解析模块argparse和docopt

    http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...

  6. python之命令行参数解析模块argparse

    """argparse模块使得写用户友好性命令行接口很容易,程序定义所需要的参数,argparse会从ays.argv中提取出这些参数.argparse模块也能自动的产生 ...

  7. python之参数解析模块argparse

    2.7之后python不再对optparse模块进行扩展,python标准库推荐使用argparse模块对命令行进行解析. 简单入门 先来看个例子: argparse_test.py: import ...

  8. Python 命令行参数解析工具 argparse

    为什么需要argparse 开门见山,举一个简易计算器代码的例子,其中sys.argv用来读取脚本执行时后面传入的参数. def calculator(x, y, operation): if &qu ...

  9. python中关于传递参数模块argprase的一些小坑

    今天在写代码的时候遇到了一个关于parser的一些小坑,记录在此备用. 我们知道在python中可以用argprase来传递一些参数给代码执行,来看下面的例子,假设现在有一个test文件夹,下面有3个 ...

随机推荐

  1. Spring cloud定义学习

    今天讲到的最重要的内容: Spring cloud是什么? Spring cloud项目 spring cloud版本     什么事springcloud? spring cloud 为开发人员提供 ...

  2. URL包里的URL.getpath()对路径中空格识别为%20的处理办法

    方法(1),使用repaceAll("%20",' ')替换后,只能解决空格问题.但是路径中包含%和中文就不行了. 方法(2),使用URLDecoder.decode(str,&q ...

  3. Django:django-cors-headers 报错no module named "corsheaders"

    django跨域使用 pip install django-cors-headers 然后在settings文件中加上参数设置 # app配置 INSTALLED_APPS = [ 'django.c ...

  4. 权限的控制 shiro的使用

    ******shiro的使用 三大核心组件 Subject:即当前用户,在权限管理的应用程序里往往需要知道谁能够操作什么,谁拥有操作该程序的权利,shiro中则需要通过Subject来提供基础的当前用 ...

  5. python中for嵌套打印图形

    # 打印出九九乘法表 1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 4 * 1 = 4 4 * 2 = 8 4 * 3 = 1 ...

  6. 如何让Qt程序在运行时获取UAC权限

    在pro文件中加入以下语句: QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\' ...

  7. BZOJ5316 : [Jsoi2018]绝地反击

    若$R=0$,那么显然答案为离原点最远的点到原点的距离. 否则若所有点都在原点,那么显然答案为$R$. 否则考虑二分答案$mid$,检查$mid$是否可行. 那么每个点根据对应圆交,可以覆盖圆上的一部 ...

  8. Rectangular Covering [POJ2836] [状压DP]

    题意 平面上有 n (2 ≤ n ≤ 15) 个点,现用平行于坐标轴的矩形去覆盖所有点,每个矩形至少盖两个点,矩形面积不可为0,求这些矩形的最小面积. Input The input consists ...

  9. USCiLab cereal json 序列化

    cereal json 序列化 https://blog.csdn.net/sunnyloves/article/details/51373793?utm_source=blogxgwz8 http: ...

  10. 201771010126 王燕《面向对象程序设计(Java)》第十六周学习总结

    实验十六  线程技术 实验时间 2017-12-8 1.实验目的与要求 (1) 掌握线程概念: ‐多线程 是进程执行过中产生的多条线索. 是进程执行过中产生的多条线索. 是进程执行过中产生的多条线索. ...