OptParse模块的简单介绍

Python 有两个内建的模块用于处理命令行参数:
  一个是 getopt只能简单处理 命令行参数;
  另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。会自动帮你负责-h帮助选项。

  要自己定制程序的参数选项控制,可以使用python自带的OptParse模块,当然也可以直接解析sys.argv里的参数(但是此比较麻烦)

import optparse

optparse 现在不再更新了,更新版本叫 argparse.
import argparse

  

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

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

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

- 就看后面的值, 要是无参的, 那继续读下一个; 要是有参的,就把参数读进来(分隔或一体).

-- 直接读后面的值;

  

optparse modlue基本用法

一,基本用法

1,载入OptionParser类,新建对象: OptionParser()

2,添加选项: add_option(…)

3,参数解析: parse_args()

举个例子:

# _*_ coding: utf-8 _*_
import optparse from optparse import OptionParser
# 一个帮助文档解释字符串
hstr = '%prog custom help string'
parser = OptionParser(hstr, description='custom description', version='%prog 1.0')
#通过OptionParser类创建parser实例,初始参数usage中的%prog等同于os.path.basename(sys.argv[0]),即
#你当前所运行的脚本的名字,version参数用来显示当前脚本的版本。
'''
添加参数,-f、--file是长短options,有一即可。
dest='user' 将该用户输入的参数保存到变量user中,可以通过options.user方式来获取该值
action用来表示将option后面的值如何处理,比如:
XXX.py -f test.txt
经过parser.parse_args()处理后,则将test.txt这个值存储进-f所代表的一个对象,即定义-f中的dest
即option.filename = 'test.txt'
action的常用选项还有store_true,store_false等,这两个通常在布尔值的选项中使用。 metavar仅在显示帮助中有用,如在显示帮助时会有:
-f FILE, --filename=FILE write output to FILE
-m MODE, --mode=MODE interaction mode: novice, intermediate, or expert
[default: intermediate]
如果-f这一项没有metavr参数,则在上面会显示为-f FILENAME --filename=FILENAME,即会显示dest的值 defalut是某一选项的默认值,当调用脚本时,参数没有指定值时,即采用default的默认值。
'''
parser.add_option('-i', '--input', action='store', dest='input', help='read input data from input file')
parser.add_option('-o', '--output', action='store', dest='output', help='write data to output file')
parser.add_option('-q', '--quite', action='store_false', dest='version', help='don\'t print the version')
# parser.add_option('-v', '--version', action='store_true', dest='version', default=False, help='print the version')
# parser.add_option('-v', '--version', action='store_true', dest='version', help='print the version') parser.add_option('-f', '--file', action='store', dest='file', help='file to handle')
parser.add_option('-a', '--add', action='append', dest='add', help='add to handle')
parser.add_option('-c', '--count', action='count', dest='count', help='count to handle')
parser.add_option('-d', '--count1', action='count', dest='count', help='count1 to handle') #parser.add_option('-v', '--version', dest='version') if parser.has_option('-f'):
print('content -f') # parser.set_default('-f', 'myFile')
parser.remove_option('-f')
if not parser.has_option('-f'):
print('do not content -f')
# 用一个数组模拟命令参数
#testArgs = ['-i', 'someForInput', '-f', 'someForFile', '-vq', '-a', 'test1 test2 test3', '-c', '-d']
testArgs = [ '-i', 'someForInput', 'someForFile', 'someForFile1', '-q', '-a', 'test1 test2 test3', '-c', '-d', '-h']
options, args = parser.parse_args(testArgs)
print('options : %s' % options)
print('args : %s' % args) if options.input:
print('input in args : %s' % options.input)
if options.version:
print('version 1.0.0') # if options.file:
# print('file in args : %s' % options.file)
if options.add:
print('add in args : %s' % options.add) print('version in args', options.version)

  

结果:

content -f
do not content -f
Usage: optParse模块的练习.py custom help string custom description Options:
--version show program's version number and exit
-h, --help show this help message and exit
-i INPUT, --input=INPUT
read input data from input file
-o OUTPUT, --output=OUTPUT
write data to output file
-q, --quite don't print the version
-a ADD, --add=ADD add to handle
-c, --count count to handle
-d, --count1 count1 to handle Process finished with exit code 0

二,新建对象

parse = 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.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_true": 当使用该选项时,后面的 dest 将设置为 true, 不跟参数.
"store_false": 当使用该选项时,后面的 dest 将设置为 false. 常配合另一个 "store_true" 的选项使用同一个 dest 时使用. 不跟参数.
"append": 储存值到 dest 指定的属性,并且是以数组的形式, 必须跟参数.
"store_const": 用来存储参数为 const 设置的值到 dest 指定的属性当中.常用于 dest 为同名2个以上选项时的处理. 不跟参数.
"append_const": 用来存储参数为 const 设置的数组到 dest 指定的属性当中. 不跟参数.
"count": 使用后将给储存值到 dest 指定的属性值加1,可以统计参数中出现次数.用途不大. 不跟参数.
"callback": 后面指定回调函数名(不加括号),会将相应opt和args传给回调函数.
"help", "version": 对应为帮助和版本. 要另外自己设计时使用. 当 action 设置为 store_ture / store_false 时, 解析参数时, 如果有值时为 Ture / False, 没有值时为 None.
当 dest 相同时, 一个 action 设置为 store_false, 另一个 action 设置为 store_ture 时, 解析参数时,以在后面出现的为准.

  

四,选项相关参数:

4.1,可以用来同时设置多个选项的默认参数

    def set_default(self, dest, value):

    def set_defaults(self, **kwargs):

  

4.2,检查是否有相应的选项

  def has_option(self, opt_str):

  

4.3,删除选项

     def remove_option(self, opt_str):

4.4,举个例子:

parser = OptionParser()
parser.add_option('-f', '--file', action='store', dest='file', help='file to handle')
if parser.has_option('-f'):
print('content -f')
parser.set_default('-f', 'myFile')
parser.remove_option('-f')
if not parser.has_option('-f'):
print('do not content -f')

输出:

content -f
do not content -f

4.5,添加选项组 add_option_group()

  如果 options 很多的时候, 可以进行分组,然后进行添加. 分组的好处是, 对一系列程序参数可以分一个组,如果有独立的 description , 可以另外处理.使用如下:

group = OptionGroup(parser)  #创建分组
group.add_option() #添加选项
parser.add_option_group(group) #将分组加入到解释器

4.6,添加选项数组 add_options([Option1,…])

将各个Option对象放在一个列表里再一起添加

五,参数解析parse_args()

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

parse_args() 返回的两个值:

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

六,帮助文档

默认自动带有 -h 和 --help 来输出帮助文档, 输出后程序终止.
帮助文档由三部分组成:

    usage 帮助部分,
usage 帮助部分一般在 OptionParser 初始化时输入,为第一个参数, 也可以用具体形参名指定. 可以使用 %prog 来表示当前的程序名. description 描述部分
在初始化 OptionParser 时 description 形参指定的内容. 选项以及选项说明部分
选项加入时定义的说明文字

  

OptionParser 的形参 version 可以指定 --version 输出的字符串, 同样支持%prog, 如 version="%prog 1.0"

举个例子:

# 一个帮助文档解释字符串
hstr = '%prog custom help string'
parser = OptionParser(hstr, description='custom description')

  

get_usage(), get_description(), get_version(): 获得对应的字符串.
print_help(), print_usage(), print_description(), print_version(): 输出相应内容
error(str): 出错并输出str.

  

Python命令行解析argparse常用语法使用简介

  python中命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用aegparse这个模块,argparse从python2.7开始被加入标准库,所以python版本在2.7以下,那么需要安装一下。

import argparse
parser=argparse.ArgumentParser()
parser.add_argument("echo",help="echo the string")
args=parser.parse_args()
print args.echo

  

1、导入argparse模块

2、创建解析器对象ArgumentParser,可以添加参数。

  • description:描述程序

    parser=argparse.ArgumentParser(description="This is a example program ")

  • add_help:默认是True,可以设置False禁用

3、add_argument()方法,用来指定程序需要接受的命令参数

  • 定位参数:

    parser.add_argument("echo",help="echo the string")

  • 可选参数:

    parser.add_argument("--verbosity", help="increase output verbosity")

在执行程序的时候,定位参数必选,可选参数可选。

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

1,argarse.ArgumentParser.parse_known_args() 解析

  此函数就是有时候,一个脚本只需要解析所有命令行参数中的一小部分,剩下的命令行参数给一两个脚本或者程序。在这种情况下,parse_known_args() 就很有用。它很像parse_args(),但是它在接受到多余的命令行参数时不报错。相反的,返回一个tuple类型的命名空间和一个保存着余下的命令行字符的list。

  举个例子,新建一个 test.py 文件,在文件中写入如下代码:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'--flag_int',
type=float,
default=0.01,
help='flag_int.'
)
FLAGS, unparsed = parser.parse_known_args()
print(FLAGS)
print(unparsed)

  结果如下:

$ python prog.py --flag_int 0.02 --double 0.03 a 1

Namespace(flag_int=0.02)
['--double', '0.03', 'a', '1']

  

python OptParse模块的用法详解的更多相关文章

  1. Python Deque 模块使用详解,python中yield的用法详解

    Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...

  2. [转]使用python来操作redis用法详解

    转自:使用python来操作redis用法详解 class CommRedisBase(): def __init__(self): REDIS_CONF = {} connection_pool = ...

  3. Python中self的用法详解,或者总是提示:TypeError: add() missing 1 required positional argument: 'self'的问题解决

    https://blog.csdn.net/songlh1234/article/details/83587086 下面总结一下self的用法详解,大家可以访问,可以针对平时踩过的坑更深入的了解下. ...

  4. python的转义字符及用法详解

    在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符. Python3.7 的官方文档中列出的所支持的转义字符,如下表: 中文版: 注:\oyy 应该是 \0yy  另外 :\e 和 \0 ...

  5. Python中内置的日志模块logging用法详解

    logging模块简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/P ...

  6. selenium模块基础用法详解

    目录 selenium模块 官方文档 介绍 安装 有界面浏览器 无界浏览器 selenium+谷歌浏览器headless模式 基本使用 选择器 基本用法 xpath 获取标签属性 等待元素被加载 隐式 ...

  7. Python Importlib模块与__import__详解

    Importlib模块与__import__都可以通过过字符串来导入另外一个模块,但在用法上和本质上都有很大的不同. 以一个例子为证: 以下为我的工程目录结构: lib/test.py: name = ...

  8. Beautifulsoup模块基础用法详解

    目录 Beautifulsoup模块 官方中文文档 介绍 基本使用 遍历文档树 搜索文档树 五种过滤器 **find_all( name , attrs , recursive , text , ** ...

  9. 使用python来操作redis用法详解

    1.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRe ...

随机推荐

  1. 微信小程序开发-IP地址查询-例子

    微信小程序开发  小程序搜索框  IP地址查询  搜索查询  样例 微信小程序 开发 参考   https://mp.weixin.qq.com/debug/wxadoc/dev/component/ ...

  2. 学习React系列(四)——受控组件与非受控组件

    受控组件:通过组件的状态与属性的改变来控制组件 不可控组件:直接通过底层的dom来控制组件(具体来说就是通过绑定再底层dom上的方法来实现的,比如说ref,onChange) 受控组件 functio ...

  3. 宝宝巴士-自动化团队-纵世科技-Wiger-原创分享-QQ:18630195

    软件定制请联系QQ: 更新原创技术博客,以及学习心得...... 软件定制请联系QQ:

  4. 阿里云在RSAC 2018上宣布 将在西雅图建立安全实验室

    日前,2018年度的RSA Conference全球信息安全大会在美国加州旧金山市召开.作为全球三大云计算服务商之一,阿里云携3款全新安全产品亮相,并宣布今年将在西雅图设立全新的安全实验室,整合全球安 ...

  5. Android ART、Dalvik在multidex上的差异、关联

    为提升应用运行性能,谷歌官方从5.0(api level:21)版本开始,将虚拟机运行环境默认为ART, 此处主要研究ART.Dalvik在multidex处理上的差异和关联,做了一个简单的手绘,如下 ...

  6. Caffe的运行mnist手写数字识别

    老规矩,首先附上官方教程:http://caffe.berkeleyvision.org/gathered/examples/mnist.html 1.必要软件 因为Caffe中使用的是Linux才能 ...

  7. [BZOJ 5093]图的价值

    Description 题库链接 一个带标号的图的价值定义为每个点度数的 \(k\) 次方的和.给定 \(n\) 和 \(k\) ,请计算所有 \(n\) 个点的带标号的简单无向图的价值之和.对 \( ...

  8. GotoAndPlay

    10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生.玉米.饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者...Description   小松鼠终于吃撑了,她决定逃离这个地方. 我 ...

  9. NOIP 2007树网的核

    题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并 ...

  10. ●BZOJ 3238 [Ahoi2013]差异

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3238 题解: 后缀数组套路深. 问题转化为求出任意两个后缀的LCP之和 在计算贡献时,各种不 ...