argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数,程序只需定义好它要求的参数,然后argparse将负责如何从sys.argv中解析出这些参数。argparse模块还会自动生成帮助和使用信息并且当用户赋给程序非法的参数时产生错误信息。

python test.py -c -i input.txt -o output.txt --user=name --port=8080      # argparse负责解析参数“-c -i input.txt -o output.txt --user=name --port=8080”

使用步骤:


1. 导入argparse模块

import argparse #导入该模块  or  from argparse import ArgumentParser

2. 创建一个解析对象parser,并告诉解析对象将会有些什么参数. 当程序运行时,该解析器就可以用于处理命令行参数。解析器类是 ArgumentParser, ArgumentParser对象会保存把命令行解析成Python数据类型所需要的所有信息。

parser = argparse.ArgumentParser()  

ArgumentParser(prog=None, usage=None,description=None, epilog=None, parents=[],formatter_class=argparse.HelpFormatter, prefix_chars='-',fromfile_prefix_chars=None, argument_default=None,conflict_handler='error', add_help=True)

这些参数都有默认值,当调用parser.print_help()或者运行程序时由于参数不正确(此时python解释器其实也是调用了pring_help()方法)时,会打印这些描述信息,一般只需要传递description参数,如上。

prog : 程序的名字(默认:sys.argv[0])
useage : 描述程序用法的字符串(默认:从解析器的参数生成)
description - 参数帮助信息之前的文本(默认:空)
epilog: 参数帮助信息之后的文本(默认:空)
parents : ArgmentParser 对象的一个列表,这些对象的参数应该包括进去
ormatter_class : 定制化帮助信息的类
prefix_chars : 可选参数的前缀字符集(默认:‘-‘)
fromfile_prefix_chars : 额外的参数应该读取的文件的前缀字符集(默认:None)
argument_default : 参数的全局默认值(默认:None)
conflict_handler : 解决冲突的可选参数的策略(通常没有必要)
add_help : 给解析器添加-h/–help 选项(默认:True)

3. 调用方法add_argument()向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项

parser.add_argument() 

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

name or flags:命令行参数名或者选项,如上面的address或者-p,--port.其中命令行参数如果没给定,且没有设置defualt,则出错。但是如果是选项的话,则设置为None
action : 在命令行遇到该参数时采取的基本动作类型。
const: 某些action和nargs选项要求的常数值。
nargs:命令行参数的个数,一般使用通配符表示,其中,'?'表示只用一个,'*'表示0到多个,'+'表示至少一个
default:默认值。如果命令行中没有出现该参数时的默认值。
type:命令行参数应该被转换成的类型。默认是字符串string类型,还有float、int等类型
choices : 参数可允许的值的一个容器。
required : 该命令行选项是否可以省略(只针对可选参数)。
help:参数的简短描述。和ArgumentParser方法中的参数作用相似,出现的场合也一致
metavar : 参数在帮助信息中的名字。
dest : 给parse_args()返回的对象要添加的属性名称。

通过调用add_argument()方法向ArgumentParser添加程序的参数信息。这些信息告诉ArgumentParser如何接收命令行上的字符串并将它们转换成对象。这些信息被保存下来并在调用parse_args()时用到。即参数可以触发不同的动作,动作由 add_argument() 方法的 action 参数指定。 支持的动作包括保存参数(逐个地,或者作为列表的一部分),当解析到某参数时保存一个常量值(包括对布尔开关真/假值的特殊处理),统计某个参数出现的次数,以及调用一个回调函数。默认的动作是保存参数值。

如果提供 dest 参数,参数值就保存为命令行参数解析时返回的命名空间对象中名为该 dest 参数值的一个属性。

argparse将所有参数值都看作是字符串,除非你告诉它将字符串转换成另一种数据类型。add_argument()type参数以一个转换函数作为值,被ArgumentParser用来将参数值从一个字符串转换成另一种数据类型。

argparse内置6种action动作可以在解析到一个参数时进行触发:

store :保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。
store_const :保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记。
store_ture/store_false: 保存相应的布尔值。这两个动作被用于实现布尔开关。
append: 将值保存到一个列表中。若参数重复出现,则保存多个值。
append_const: 将一个定义在参数规格中的值保存到一个列表中。
version :打印关于程序的版本信息,然后退出

4. 调用parse_args()方法进行解析;解析成功之后即可使用

parser.parse_args()

ArgumentParser通过parse_args()方法解析参数。给parse_args() 传递一组参数字符串来解析命令行。默认情况下,参数是从 sys.argv[1:] 中获取,但你也可以传递自己的参数列表。它将检查命令行,把每个参数转换成恰当的类型并采取恰当的动作。在大部分情况下,这意味着将从命令行中解析出来的属性建立一个简单的 Namespace对象。选项是使用GNU/POSIX语法来处理的,所以在序列中选项和参数值可以混合。parse_args() 的返回值是一个命名空间,包含传递给命令的参数。该对象将参数保存其属性,因此如果你的参数 dest 是 "myoption",那么你就可以args.myoption 来访问该值。

Python module ---- argparse的更多相关文章

  1. install python module

    [install python module] 参考:http://docs.python.org/2.7/install/index.html

  2. Nuke Python module的使用

    最近很多脚本工作都需要脱离nuke的gui环境运行,没有了script editor就必须要尝试Nuke Python module功能了.该模式可以执行大部分在GUI环境中的命令,在自动生成或者批量 ...

  3. python中argparse模块用法实例详解

    python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...

  4. python中argparse

    python中argparse 在很多编程语言中,运行程序可以直接使用function(a,b,……)运行程序,但是在python中就无法实现,那么我们如何在命令行中传递参数呢?在python的中,有 ...

  5. __import__ 与动态加载 python module

    原文出处: koala bear    Direct use of __import__() is rare, except in cases where you want to import a m ...

  6. Python的argparse模块的使用

    Python的argparse模块的使用 最近看到一份Pytorch代码有以下内容: # Training settings parser = argparse.ArgumentParser(desc ...

  7. python中argparse模块简单使用

    python中argparse模块简单使用 简介 argparse是python用于解析命令行参数和选项的标准模块.argparse模块的作用是用于解析命令行参数. 使用步骤 1.首先导入该模块 2. ...

  8. Python module中的全局变量

    Python module中的全局变量 我想要实现一个python module,这个module中有一些配置项,这些配置项可以被读取,被修改.一个可行的方案是把这些配置项写到一个叫settings. ...

  9. Python module all in one

    Python module all in one Python Modules https://docs.python.org/3/tutorial/modules.html Fibonacc # F ...

随机推荐

  1. vim 常用 NERDTree 快捷键

    ctrl + w + h 光标 focus 左侧树形目录 ctrl + w + l 光标 focus 右侧文件显示窗口 ctrl + w + w 光标自动在左右侧窗口切换 ctrl + w + r 移 ...

  2. windows知识点2

    最近在使用win10系统的过程中,无法获取dns报错,上不了网.经过一番折腾,最终在用下面的方法,解决了问题.第二步很关键.完成步一下步骤重启电脑应该就可以上网了.12第一步:使用 ipconfig ...

  3. tunnel sw

    tunnel sw openssh vpn httprltunnel BarbaTunnel ngrok Chisel https://github.com/jpillora/chisel/blob/ ...

  4. 解决Tomcat的IllegalArgumentException: Control character in cookie value or attribute错误

    接口中带有中文,tomcat8 17-Apr-2019 13:21:23.734 严重 [http-nio-8082-exec-2] org.apache.coyote.http11.Abstract ...

  5. MQTT研究之EMQ:【wireshark抓包分析】

    基于上篇博文[SSL双向验证]的环境基础,进行消息的具体梳理. 环境基础信息: . 单台Linux CentOS7.2系统,安装一个EMQTTD的实例broker. . emq的版本2.3.11. . ...

  6. ES6模板字符串【${}配合反单引号一起用】

    先看看JavaScript中两个字符串的效果,就很容易知道模板字符串是个啥东西,其实一点也不新鲜.高级编程中,例如java里面的string.format就是干这个事情,诸如此类. 1. 概念理解 A ...

  7. VS Code直接编辑下一行

    ctrl + enter 可以直接跳转到下一行进行编辑,本行后面的字符不受影响. 这在书写html脚本时非常有用.

  8. 浅析MSIL中间语言——基础篇(转)

    来自:https://www.cnblogs.com/dwlsxj/p/MSIL.html 一.开篇 研究MSIL纯属于个人喜好,说在前面MSIL应用于开发的地方很少,但是很大程度上能够帮着我们理解底 ...

  9. SecureCRT 6.7 vim高亮

    cp /etc/vimrc ~/.vimrc set nocompatible                 "去掉有关vi一致性模式,避免以前版本的bug和局限 set nu!      ...

  10. 前端——JavaScript之if语句

    4.1 if语句 如果……否则……  , 让程序出现分支 1        <script type="text/javascript"> 2           va ...