python argparse (续一)

源地址  http://blog.iamzsx.me/show.html?id=100001

参考文章 http://docs.python.org/2/library/argparse.html#module-argparse


python 的命令解析argparse

比较方便学习的实例+帮助

# -*- coding: utf -*-

import argparse

args = "-f hello.txt -n 1 2 3 -x 100 -y b -z a -q hello @args.txt i_am_bar -h".split()
#使用@args.txt要求fromfile_prefix_chars="@"
#args.txt 文件中应该一行一个参数,想改变行为参数
#convert_arg_line_to_args()

#ArgumentParser参数的简单说明
##description -命令行帮助的开始文字,大部分情况下,我们只会用到这个参数
#epilog -命令行帮助的结尾文字
#prog - (default: sys.arg[0])程序的名字,一般不需要修改,另外,如果你需要再help中使用到程序的名字,可以使用%(prog)s
#prefix_chars -命令的前缀, 默认是- 例如-f/--file。有些程序可能希望支持/f这样的选项,可以使用prefix_chars="/"
#fromfile_prefix_chars - (default:None)如果希望命令行参数可以从文件中读取,就可能用到。例如,如果fromfile_prefix_chars='@',命令行参数中有一个为“@args.txt",args.txt 的内容会作为命令行参数
#add_help -是否增加-h/-help选项(default=True),一般help信息都是必须的,所以不用设置。
#parents -类型是list, 如果这个parser的一些选项跟其他某些parser的选项一样,可以用parents来实现集成,例如parents=[parent_parser]
##formatter_class -自定义帮助信息的格式(description和epilog)。默认情况下会将长的帮助信息进行<自动换行和消除多个连续空白>.
#三个允许的值:
# class argparse.RawDescriptionHelpFormatter 直接输出description和epilog的原始形式(不进行自动换行和消除空白的操作)
#class argparse.RawTextHelpFormatter 直接输出description和epilog以及add_argument中的help字符窜的原始形式(不进行自动换行和消除空白的操作)
##class argparse.ArgumentDefaultHelpFormatter在每个选项的帮助信息后面输出他们对应的缺省值,如果有设置的话。这个最常用。
#argument default -(default:None) 设置一个全局的选项的缺省值,一般每个选项单独设置,所以这个参数用得少,不细说。
#usage -(default:generated)如果你需要修改usage的信息(usage:PROG [-h] [--foo [FOO]] bar [bar ...]),那么可以修改这个,一般不修改)
#conflict_handler -不建议使用。这个在极端情况下才会用到,主要是定义两个add_argument中添加的选项的名字发生冲突时怎么处理,默认处理是抛出异常。
#注释一行有##表示这几个参数比较常用

parser = argparse.ArgumentParser(description="This is a description of %(prog)s", epilog="This is a epilog of %(prog)s", prefix_chars="-+",fromfile_prefix_chars="@", formatter_class=argparse.ArgumentDefaultsHelpFormatter)

#ArgumentParser.add_arguent(name or flags ...[,action][,nargs][,const][,default][,type][,choices][,requierd][,help][,metavar][,dest]
#add_argument的参数

#name or flags -指定参数的形式,想写几个写几个,一般写两个,一个短参数,一个长参数,例子“-f","--file"
#可选的选项,位置不固定,想怎么写酒怎么写,默认是可选的
parser.add_argument("-f","--file",help="file hellp")
#位置固定的选项,如"prog i_am_bar",这样,i_am_bar就是bar选项的值,默认是必须有的
parser.add_argument("bar", help="bar help")

#nargs -指定这个参数后面的value有多少个,例如希望使用-n 1 2 3 4 来设置n的值为[1,2,3,4]
parser.add_argument("-n", "--num", nargs="+", type=int)
#这里nargs=”+“ 表示 如果你指定了-n选项,那么-n 后面至少要跟一个参数,+表示至少一个,?表示0/1,*表示0/多个

#default -如果命令行没有出现这个选项,那么使用default指定的默认值
parser.add_argument("+g", "++gold", help="gold help", default="test_gold")
#这里需要prefix_chars包含“++”

#type -如果希望传进来的参数是指定的类型(例如float,int or file等可能从字符窜转换过来的类型)可以使用
parser.add_argument("-x", type=int)

#choice -设置参数值的范围,如果choices中的类型不是字符窜,记得指定type
parser.add_argument("-y", choices=['a','b','d'])


#required - 通常-f这样的参数是可选的,但是如果required=True那么就是必须的了
parser.add_argument("-z", choices=['a','b','d'],required=True)

#metavar - 参数的名字,再显示帮助信息时才用到
parser.add_argument("-o", metavar="OOOOO")

#help -设置这个选项的帮助信息
#dest -设置这个选项的值,就是解析出来后放到哪个属性中
parser.add_argument("-q", dest="world")

args = parser.parse_args(args)
#若没有args参数,那么就使用sys.argv,也就是命令行参数。有该参数,方便调试
#args.world就是-q 的值

print args

运行结果

cloud@ubuntu22:~/workspace/pythontest/argparse$ vim argparse_example.py 

usage: argparse_example.py [-h] [-f FILE] [-n NUM [NUM ...]] [+g GOLD] [-x X]
                           [-y {a,b,d}] -z {a,b,d} [-o OOOOO] [-q WORLD]
                           bar

This is a description of argparse_example.py

positional arguments:
  bar                   bar help

optional arguments:
  -h, --help            show this help message and exit
  -f FILE, --file FILE  file hellp (default: None)
  -n NUM [NUM ...], --num NUM [NUM ...]
  +g GOLD, ++gold GOLD  gold help (default: test_gold)
  -x X
  -y {a,b,d}
  -z {a,b,d}
  -o OOOOO
  -q WORLD

This is a epilog of argparse_example.py
补充action/nargs/const的关系

#补充action 、 const、default
new_parser = argparse.ArgumentParser(prog="new")

new_parser.add_argument("-addr", action="store_const", const="12", default='34')

#const 和default都是设置默认值,
#但const匹配给出的命令名称,且与nargs='?' 一起使用
#default匹配没有给出命令行名称
new_parser.add_argument("-a", nargs="?", const='12',default="34")
new_parser.add_argument("-b", nargs="?",default="34")
new_parser.add_argument("-c",default="34")

args1 = new_parser.parse_args('-addr'.split())
#args1 = Namespace(a='34', addr='12', b='34', c='34')
#没有给出命令名称-a 和-b ,因此匹配default

args2 = new_parser.parse_args('-addr -a -b'.split())
#args2 = Namespace(a='12', addr='12', b=None, c='34')
#给出命令名称-a -b,因此匹配const,-b没有指定const,因此匹配的const=None

#对于new_parser.add_argument("-c",default="34")
#没有指定const以及nargs,因此匹配字符窜不能出现不带参数的-c,会提示出错
#如new_parser.parse_args('-addr -a -b -c'.split())
#出错信息new: error: argument -c: expected one argument

#action 和const的使用情况
new_parser.add_argument('-d', default='34')
#没有给出action,默认情况下,action='store',即保存匹配的值

#new_parser.parse_args('-d 100'.split())
#
new_parser.add_argument('-e', action='store_const', const='12', default = '34')
#匹配保存const的值,需要给出const,不然出错


new_parser.add_argument('-f', action='store_true', default="34")
#匹配保存true,不能给出const,及命令行参数,不然出错
#arg = '-f 12' 抛异常 new: error: unrecognized arguments: 12
new_parser.add_argument('-g', action='append')
#匹配出来为列表,且可重复给出-g的命令行参数来匹配


#此外,action可以定义一个具有__call__的类,对values进行重新包装
class FooAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        new_values = values + "add"
        print "%r %r %r" %(namespace, new_values, option_string)
        setattr(namespace, self.dest, new_values)

new_parser.add_argument('--foo', action=FooAction)

arg3 = new_parser.parse_args('-d 10 -e -f -g arg1 -g arg2 --foo hihi'.split())

arg4 = new_parser.parse_args('-g ok'.split())

#arg3 = Namespace(a='34', addr='34', b='34', c='34', d='10', e='12', f=True, foo='hihiadd', g=['arg1', 'arg2'])

#arg4 = Namespace(a='34', addr='34', b='34', c='34', d='34', e='34', f='34', foo=None, g=['ok']) 


注意:

args 有参数-h时,会输出帮助文档,并且抛出一个SystemExit(0,),使程序终止


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python argparse 模块是 Python 标准库中用于解析命令行参数和选项的模块。它提供了一种简单而灵活的方法来处理命令行参数,并且可以自动生成格式漂亮的帮助文档。 argparse 中有许多参数选项,其中一个是 type。type 参数指定了命令行参数的数据类型。当我们使用 argparse 解析命令行参数时,它会将字符串类型的参数转换为指定的类型。例如,如果我们指定 type=int,那么 argparse 将会把输入的字符串转换为整数类型。 argparse 提供了一些内置的类型函数,如 int、float、str、bool 等,也可以自定义类型函数。下面是一个示例,说明如何使用 type 参数来指定参数的数据类型: ```python import argparse parser = argparse.ArgumentParser() parser.add_argument('--name', type=str, help='name of the user') parser.add_argument('--age', type=int, help='age of the user') args = parser.parse_args() print(args.name) print(args.age) ``` 在上面的示例中,我们使用 add_argument() 方法添加了两个参数:--name 和 --age。type 参数分别指定了它们的数据类型为 str 和 int。 当我们在命令行中输入参数时,argparse 会自动将字符串类型的参数转换为指定的类型。例如,我们执行以下命令: ```bash python test.py --name Tom --age 25 ``` argparse 将会把 name 参数解析为字符串类型的 'Tom',将 age 参数解析为整数类型的 25。 总之,argparse 的 type 参数让我们可以轻松地控制命令行参数的数据类型,使得命令行参数处理变得更加简单和方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值