Python学习笔记-argparse模块

optparseargparse

昨天学习了一个简单的端口扫描器的脚本,其中涉及到了optparse模块,网上关于此模块的介绍已有很多,但这个模块已经不更新了,新的模块叫argparse。百度学习了argparse的用法后,这里简单比较一下二者,仅为加深自己的理解

一、optparse

optparse模块用于解析命令行,可以自己定制程序的参数选项控制。

optparse支持一般性GUN的选项方法,包括:

1.无参数选项, -v
2.有参数项, -p value, -para=value
3.值参一体, -pvalue(不支持长参数)
4.合并选项, -abc,-abcp value(最后一个可以是有参,其余均无参)

解析时,- 和 --的区别:

  • - 看后面的值,如果时无参的,继续下一个;有参, 就把参数读进来;
  • -- 直接读后面的值;

1. 基本用法

1.载入OptionParser类,新建对象:OptionParser()
2.添加选项: add_option()
3.参数解析: parse_args()

举个例子:

import optparse
from optparse import OptionParser parser=optparse.OptionParser("usage%prog "+"-H <target host> -p <target port>")
#通过OptionParser创建parser实例,初始参数usage中的%prog等同于os.path.basename(sys.argv[0]),即当前所运行的脚本的名字。
parser.add_option('-H',dest='tgtHost',type='string',help='specify target host')
parser.add_option('-p',dest='tgtPost',type='int',help='specify target post')
(options,args)=parser.parse_args()

2. 新建对象

parser=OptionParse()

形参包括:

def __init__(self,
usage=None,
option_list=None,
option_class=Option,
version=None,
conflict_handler="error",
description=None,
formatter=None,
add_help_option=True,
prog=None,
epilog=None):

3. 新建选项:

3-1. 可以使用以下几个方法:

add_option,add_option_group,add_options.

3-2. 具体参数分析:

add_option(...):
add_option 方法中前面的参数为命令的选项,可以为等价的短名或长名,一般是前面为短名,后面为长名。
可配置的参数为:
dest:可以决定解析后,取值时的属性名,尤其适于多个等价参数,不指定时就是选项不加-的字符串.
type:选项的值类型,值的默认类型是字符串,这里将值指定为其他类型.
default:缺省值,没有设置缺省值的为None.
help:选项中有-h 时打印的help信息.
metavar:表示显示到help中选项的默认值;
choices:当type设置为choices时,需要设置此值.
const:指定一个常量值给选项,该常量值将用于后面store_const和append_const,一起合用
action:用于控制对选项和参数的处理,像无参数选项处理,可以设置为以下几种字符串:
"store":储存值到dest指定的属性,强制要求后面提供参数;
"store_ture":当使用该选项时,后面的dest将设置为true,不跟参数.
"store_false":当使用该选项时,后面的dest将设置为false.常配合"store_ture"使用一个dest时使用.不跟参数
"append":储存值到dest指定的属性,并且是以数组的形式,必须跟参数.
"store_const":用来存储参数为const设置的值到dest指定的属性中.常用于dest为同名2个以上选项时的处理.不跟参数
"append_const":用来存储参数为const设置的值到dest指定的属性中.
"count":使用后将给储存值到dest指定的属性值加1,可以统计参数中出现次数.用途不大,不跟参数.
当action设置为store_ture/store_false时,解析参数时,如果有值时为 Ture/False,没有值时为None.
当dest值相同时,一个action设置为store_false,另一个设置为store_ture时,解析参数时,以在后面出现的为准.

4. 参数解析parse_args()

使用parse_args()对参数进行解析,默认是使用sys.argv[1:][1]作为参数,也可以传递一个命令行参数列表:parse_args(list)

parse-args()返回两个值:

  • options,它是一个对象,保存有命令行参数值。只要知道命令行参数名,如input,就可以访问其对应的值:options.input
  • args,它是没被解析的命令行参数的列表。

二、argparse

argparse模块可以轻松编写用户友好的命令行界面。该程序定义了它需要的参数,argparse并将找出如何解析这些参数sys.argv

argparse模块还会自动生成帮助和用法消息,并在用户给出程序无效参数时发出错误。

举个例子:

import argparse #导入athparse模块
parser=argparse.ArgumentParser()
#创建解析器对象ArgumentParser,可以添加参数。
parser.add_argument("echo",help="echo the string")
args=parser.parse_args()
print(args.echo)

1. add_argument()

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:参数命令介绍

2. ArgumentParser.parse_known_args()解析

此函数用于一个脚本只需要解析所有命令行参数的一小部分,剩下的命令行参数给一两个脚本或程序。在这种情况下,parse_known_args() 就很有用。它很像parse_args(),但是它在接受到多余的命令行参数时不报错。相反的,返回一个包含已填充名称空间和剩余参数字符串列表的两个项目元组。

比如:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'--input',type=int,default=0,help='input.'
)
INPUT, unparsed = parser.parse_known_args()
print(INPUT)
print(unparsed)

运行后返回:

$ python>test.py --input 1 --double 0.01 a
Namespace(input=1)
['--double', '0.01', 'a']

三、区别:

argparse模块以多种方式改进了optparse模块,包括:

  • 处理位置参数
  • 支持子命令
  • optparse.OptionParser.add_option()调用替换所有ArgumentParser.add_argument()调用。
  • 更换(options, args) = parser.parse_args()args = parser.parse_args()并添加额外ArgumentParser.add_argument()的定位参数调用。
  • 其它的用到再补充。

  1. 在Python中,参数是元素sys.argv[1:](sys.argv[0]是正在执行的程序的名称).

Python学习笔记-argparse模块的更多相关文章

  1. python学习之argparse模块

    python学习之argparse模块 一.简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行 ...

  2. Python学习笔记之模块与包

    一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...

  3. Python学习笔记—itertools模块

    这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...

  4. python学习笔记_week5_模块

    模块 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的python文件(文件名:test.py,对应模块名:test) 包:用来从逻辑上 ...

  5. python学习笔记(八)-模块

    大型python程序以模块和包的形式组织.python标准库中包含大量的模块.一个python文件就是一个模块.1.标准模块 python自带的,不需要你安装的2.第三方模块 需要安装,别人提供的. ...

  6. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  7. Python学习笔记1—模块

    模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11   (module11是module的子模块) 例: ...

  8. Python学习笔记2——模块的发布

    1.为模块nester创建文件夹nester,其中包含:nester.py(模块文件): """这是"nester.py"模块,提供了一个名为prin ...

  9. python学习笔记十——模块与函数

    第五章 模块与函数 5.1 python程序的结构 函数+类->模块              模块+模块->包                 函数+类+模块+包=Python pyth ...

  10. Python学习笔记14—模块

    在python中所有的模块都被加入到了sys.path中,用下面的方法可以看见模块的位置. >>> import sys >>> import pprint > ...

随机推荐

  1. ZIP文件操作工具类

    2 3 import lombok.extern.slf4j.Slf4j; 4 import org.apache.commons.io.FilenameUtils; 5 6 import java. ...

  2. Vue全局方法配置

    在Vue项目开发中,肯定会有这样一个场景:在不同的组件页面用到同样的方法,比如格式化时间,文件下载,对象深拷贝,返回数据类型,复制文本等等.这时候我们就需要把常用函数抽离出来,提供给全局使用.那如何才 ...

  3. pgsql给表重命名

    alter table "pavement_damage_dtl_temp" rename to "pavement_damage_dtl"; 搜索 复制

  4. Android 将函数放到主线程运行

    有时候,app会检测加密函数是否在主线程运行,为了逃避这种检测,要将函数放到主线程运行 Class<?> aClass = RposedHelpers.findClass("co ...

  5. Delphi中var和out

    var: 传递的是参数的地址 out: 以返回值的形式返回结果,类似函数的效果:可以实现一个函数返回多个值

  6. C#之List、Queue、Stack使用EnsureCapacity方法预设数组大小

    简介 List.Queue 和 Stack 集合中的 EnsureCapacity方法预设数组大小. 为什么以及何时使用EnsureCapacity 方法 这里我们将首先了解为什么需要使用这种方法以及 ...

  7. ZSTUOJ刷题⑨:Problem H.--尖兵

    Problem H: 尖兵 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4691  Solved: 2112 Description 星光人已经出发了 ...

  8. TypeError: Cannot read property ‘$options‘ of undefined vue

    vue弹框页面 <el-form :model="ruleForm" ref="ruleForm" label-width="100px&quo ...

  9. scala之函数式编程

    1.面相对象编程和函数式编程 2.函数和方法的区别 scala可以在任何的语法结构中声明任何的语法: scala中函数可以嵌套定义: scala中如果main内部的函数 和 main外部的函数名称.参 ...

  10. Shell脚本基本命令4

    使用join连接字段 1.$ cat >sales 创建salse文件 #业务员数据   注释说明 #业务员量 joe 100 jane 200 herman 150 chris 300 2.$ ...