python内置包 argparse使用(解析命令行传参)

argparse命令是解析命令行传递的参数工具
比如命令行执行一个python命令
python test.py 10 20
我想要在test.py文件运行的时候拿到传递的参数10和20 就需要使用 argparse 包

使用方法:简单案例

定位参数解析(Positional argument)

# -*- coding: utf-8 -*-

import argparse   # 导包

parser = argparse.ArgumentParser()  # 创建对象
parser.add_argument('integer', type=int, help='display an integer')  # 添加匹配参数规则
# integer 是给获取的参数赋值一个变量名 ,  type 设置匹配的参数类型  help 是使用 -h 时展示的内容
args = parser.parse_args()  # 获取所有参数, 注意不是一个字典,下面获取数据只能用 点 .

print args.integer   # 打印参数

运行结果

python test_argparse.py 10
>>10
python test_argparse.py -h
>>usage: test_argparse.py [-h] integer   # 输出命令的格式,即使用方式
>>positional arguments:
>>integer     匹配整数

# 如果传递参数多于需要的参数,会报错太多的参数

可选参数 案例(Optional argument)

# -*- coding: utf-8 -*-

import argparse

parser = argparse.ArgumentParser()

parser.add_argument("--square", help="display a square of a given number", type=int)
# 添加可选参数,需要在定义变量名的时候加 --
# 命令行调用的时候也要加 -- 变量名
parser.add_argument("--cubic", help="display a cubic of a given number", type=int)

args = parser.parse_args()

if args.square:
    print(args.square**2)

if args.cubic:
    print(args.cubic**3)

调用方式:

如果参数都是可选的,则不传参直接执行运行不会报错
python test_argparse.py 

如果传参,命令行需要加对应的可选参数变量名,命令行调用必须参数传递不需要加变量名
python test_argparse.py --square 10
>> 100

python test_argparse.py --square 10  --cubic 3
>>100
>>27

可选参数和必选参数配合使用

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers',  type=int, nargs='+',   # nargs 指定了至少为1个值,并且存为列表
                   help='an integer for the accumulator')  # 添加必选参数 命令行调用不用加变量名
parser.add_argument('--sum', dest='accumulate', action='store_const',  # dest是将捕获到的可选参数解析为 调用时的变量名
                    # 第12行 是调用 ,也可以理解为 定位参数指定的变量名调用  可选参数以dest指定变量名调用
                   const=sum, default=max,  # default 是不指定可选参数时的默认值,这里使用了python内置方法max
                   help='sum the integers (default: find the max)') # 下面的打印是将integers得到的参数传进来解析
#  action 是将变量存储到const 里面, const又调用python内置函数 sum 求和

args = parser.parse_args()
print(args.accumulate(args.integers))

调用

python test_argparse.py 1 2 3 4
>>4
python test_argparse.py 1 2 3 4 --sum
>>10

下面详解 add_argument命令

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

name or flags  #选项字符串的名字或者列表,例如 foo 或者 -f, --foo

action  # 命令行遇到参数时的动作,默认值是 store。
    # =store_const,表示赋值为const;
    # =append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
    # =append_const,将参数规范中定义的一个值保存到一个列表;
    # =count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;

nargs - 应该读取的命令行参数个数,可以是具体的数字,
    # 或者是?号,一个参数
    # 当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;
    # 或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。

const - action 和 nargs 所需要的常量值

default - 不指定参数时的默认值。这里指定了python内置的max函数,选取最大值

type - 命令行参数应该被转换成的类型。

choices - 参数可允许的值的一个容器。

required - 可选参数是否可以省略 (仅针对可选参数)。

help - 参数的帮助信息,打印的说明

dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,695评论 0 3
  • 对CLI程序来说,参数解析大概是一个首要的问题。 当然,也有例外。 无参数脚本 许多常用命令,不需要输入参数,就可...
    匿蟒阅读 10,107评论 1 5
  • python Argparse模块的使用 标签:python 参考: Argparse Tutorial:http...
    初来的雨天阅读 2,102评论 0 1
  • getopt:和C中的getopt()等价。optparse:2.7后已不推荐使用。argparse:基于optp...
    顾慎为阅读 8,689评论 1 10
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,214评论 4 16