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. drf从入门到飞升仙界 06

    模型类准备 from django.db import models # 图书跟作者:多对多,需要建立中间表,但是我们可以通过ManyToManyField自动生成,写在哪里都行 # 图书跟出版社:一 ...

  2. golang中自带base64编码和解码

    package main import ( "encoding/base64" "fmt" "log" ) func main() { in ...

  3. 基于Linux的ssh协议配置sftp

    sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装 1.  创建sftp组 创建完成之后使用cat /etc/group命令组的信息 ...

  4. Unity 简易聊天室(基于TCP)(2)

    客户端用Unity开发,主要就是搭建一下聊天室的UI界面:输入框,聊天内容显示框,发送按钮 灰色背景的就是Message,也就是聊天内容的显示框,是一个Text类型,这里创建UI方面就不多讲了 在Ca ...

  5. 目前为止最完善专业的微信小程序商城

    购买商业版(368元): http://market.zhenzikj.com/detail/82.html帮助文档:https://www.kancloud.cn/crmeb/crmeb/66242 ...

  6. Linux 第二节(基本命令)

    www.linuxcool.com 一.ifconfig 1.Ip 地址 2.MAC地址 3.收到的数据包(RX) 4.发送的数据包(Tx) 二.uname uname -a    //查看系统内核及 ...

  7. KinectFusion算法论文解读/代码解读随笔

    --2021.6.8 上图是kinectfusion的流程图,是整个系统的工作流.我们对上面的流程进行分析以及相关代码的解读,使用的代码库是pcl的Kinectfusion复现.(ps:因为我只在ub ...

  8. php success error 封装跳转

    /** * Warning提示信息 * @param string $type 提示类型 默认支持success, error, info * @param string $msg 提示信息 * @p ...

  9. iterm2免密自动登陆服务器

    之前的配置方式出现了less命令查看文本格式紊乱,以及输入的命令也是紊乱的,导致没办法正常使用 以前的配置方式如下: 在iterm2里配置command,如下图 2. online文件如下: #!/u ...

  10. ZXing 生成二维码和条形码(添加NuGet包)