python 命令行解析模块 argparse

以前总是只用argv[1]之类的作为参数,这次看到一个题,基本上要用它了


add_argument:读入命令行参数,该调用有多个参数
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

name or flags:是必须的参数,该参数接受选项参数或者是位置参数(一串文件名)



  1. >>> parser.add_argument('-f', '--foo')    #选项参数 
  2. >>> parser.add_argument('bar')        #位置参数 
>>> parser.add_argument('-f', '--foo')    #选项参数
>>> parser.add_argument('bar')        #位置参数

nargs: 当选项后接受多个或者0个参数时需要这个来指定
比如-u选项接受2个参数


  1. >>> parser.add_argument('-u',nargs=2
  2. >>> parser.parse_args('-u a b'.split()) 
  3. Namespace(u=['a', 'b']) 
>>> parser.add_argument('-u',nargs=2)
>>> parser.parse_args('-u a b'.split())
Namespace(u=['a', 'b'])

当选项接受1个或者不需要参数时指定nargs=’?',当没有参数时,会从default中取值。对于选项参数有一个额外的情况,就是出现选项而后面没有跟具体参数,那么会从const中取值


  1. >>> parser.add_argument('-u',nargs='?'
  2. >>> parser.parse_args(''.split()) 
  3. Namespace(u=None
  4. >>> parser.parse_args('-u a'.split()) 
  5. Namespace(u='a'
  6.  
  7. >>> parser.add_argument('-u',nargs='?',default='d'
  8. >>> parser.add_argument('A',nargs='?',default='e'
  9. >>> parser.parse_args(''.split()) 
  10. Namespace(A='e', u='d'
  11. >>> parser.parse_args('-u'.split()) 
  12. Namespace(A='e', u=None
  13.  
  14. >>> parser.add_argument('-u',nargs='?',default='d',const='s'
  15. >>> parser.add_argument('A',nargs='?',default='T',const='P'
  16. >>> parser.parse_args(''.split()) 
  17. Namespace(A='T', u='d'
  18. >>> parser.parse_args('-u'.split()) 
  19. Namespace(A='T', u='s'
  20. >>> parser.parse_args('A'.split()) 
  21. Namespace(A='A', u='d'
>>> parser.add_argument('-u',nargs='?')
>>> parser.parse_args(''.split())
Namespace(u=None)
>>> parser.parse_args('-u a'.split())
Namespace(u='a')

>>> parser.add_argument('-u',nargs='?',default='d')
>>> parser.add_argument('A',nargs='?',default='e')
>>> parser.parse_args(''.split())
Namespace(A='e', u='d')
>>> parser.parse_args('-u'.split())
Namespace(A='e', u=None)

>>> parser.add_argument('-u',nargs='?',default='d',const='s')
>>> parser.add_argument('A',nargs='?',default='T',const='P')
>>> parser.parse_args(''.split())
Namespace(A='T', u='d')
>>> parser.parse_args('-u'.split())
Namespace(A='T', u='s')
>>> parser.parse_args('A'.split())
Namespace(A='A', u='d')


而对于后面需要跟多个参数的情况(–foo a1 a2 a3…),则需要设置nargs=’*’


  1. >>> parser.add_argument('-u',nargs='*'
  2. >>> parser.parse_args('-u a b c d e'.split()) 
  3. Namespace(u=['a', 'b', 'c', 'd', 'e']) 
>>> parser.add_argument('-u',nargs='*')
>>> parser.parse_args('-u a b c d e'.split())
Namespace(u=['a', 'b', 'c', 'd', 'e'])



nargs=’+'也和nargs=’*'一样,但是有一个区别当’+'时少于1个参数(没有参数)位置参数会报错误


  1. >>> parser.add_argument('u',nargs='+'
  2. >>> parser.parse_args(''.split()) 
  3. usage: [-h] u [u ...] 
  4. : error: too few arguments 
>>> parser.add_argument('u',nargs='+')
>>> parser.parse_args(''.split())
usage: [-h] u [u ...]
: error: too few arguments



而‘*’会使用默认值


  1. >>> parser.add_argument('u',nargs='*',default='e'
  2. >>> parser.parse_args(''.split()) 
  3. Namespace(u='e'
>>> parser.add_argument('u',nargs='*',default='e')
>>> parser.parse_args(''.split())
Namespace(u='e')


default: 当参数需要默认值时,由这个参数指定,默认为None,当default=argparse.SUPPRESS时,不使用任何值


  1. >>> parser.add_argument('u',nargs='*',default=argparse.SUPPRESS) 
  2. >>> parser.parse_args(''.split()) 
  3. Namespace() 
>>> parser.add_argument('u',nargs='*',default=argparse.SUPPRESS)
>>> parser.parse_args(''.split())
Namespace()

type: 使用这个参数,转换输入参数的具体类型,这个参数可以关联到某个自定义的处理函数,这种函数通常用来检查值的范围,以及合法性

  1. >>> parser.parse_args('-u',type=int) 
  2. >>> parser.add_argument('f',type=file) 
  3. >>> parser.parse_args('-u 2 aa'.split()) 
  4. Namespace(f=<open file 'aa', mode 'r' at 0x8b4ee38>, u=2
>>> parser.parse_args('-u',type=int)
>>> parser.add_argument('f',type=file)
>>> parser.parse_args('-u 2 aa'.split())
Namespace(f=<open file 'aa', mode 'r' at 0x8b4ee38>, u=2)



choices: 这个参数用来检查输入参数的范围

  1. >>> parser.add_argument('-u',type=int,choices=[1,3,5]) 
  2. >>> parser.parse_args('-u 3'.split()) 
  3. Namespace(u=3
  4. >>> parser.parse_args('-u 4'.split()) 
  5. usage: [-h] [-u {1,3,5}] 
  6. : error: argument -u: invalid choice: 4 (choose from 1, 3, 5
>>> parser.add_argument('-u',type=int,choices=[1,3,5])
>>> parser.parse_args('-u 3'.split())
Namespace(u=3)
>>> parser.parse_args('-u 4'.split())
usage: [-h] [-u {1,3,5}]
: error: argument -u: invalid choice: 4 (choose from 1, 3, 5)


required: 当某个选项指定需要在命令中出现的时候用这个参数

  1. >>> parser.add_argument('-u',required=True
  2. >>> parser.parse_args(''.split()) 
  3. usage: [-h] -u U 
  4. : error: argument -u is required 
>>> parser.add_argument('-u',required=True)
>>> parser.parse_args(''.split())
usage: [-h] -u U
: error: argument -u is required

help: 使用这个参数描述选项作用

  1. >>> parser.add_argument('-u',required=True,default='wowo',help='%(prog)s for test sth(default: %(default)s)'
  2. >>> parser.print_help()                                                        usage: [-h] -u U 
  3.  
  4. optional arguments: 
  5.   -h, --help  show this help message and exit 
  6.   -u U        for test sth(default: wowo) 
>>> parser.add_argument('-u',required=True,default='wowo',help='%(prog)s for test sth(default: %(default)s)')
>>> parser.print_help()                                                        usage: [-h] -u U

optional arguments:
  -h, --help  show this help message and exit
  -u U        for test sth(default: wowo)



dest: 这个参数相当于把位置或者选项关联到一个特定的名字

  1. >>> parser.add_argument('--str',nargs='*'
  2. >>> parser.parse_args('--str a b c'.split()) 
  3. Namespace(str=['a', 'b', 'c']) 
  4.  
  5. >>> parser.add_argument('--str',nargs='*',dest='myname'
  6. >>> parser.parse_args('--str a b c'.split()) 
  7. Namespace(myname=['a', 'b', 'c']) 
>>> parser.add_argument('--str',nargs='*')
>>> parser.parse_args('--str a b c'.split())
Namespace(str=['a', 'b', 'c'])

>>> parser.add_argument('--str',nargs='*',dest='myname')
>>> parser.parse_args('--str a b c'.split())
Namespace(myname=['a', 'b', 'c'])

metavar: 这个参数用于help 信息输出中

  1. >>> parser.add_argument('--str',nargs='*',metavar='AAA'
  2. >>> parser.print_help() 
  3. usage: [-h] [--str [AAA [AAA ...]]] 
  4.  
  5. optional arguments: 
  6.   -h, --help            show this help message and exit 
  7.   --str [AAA [AAA ...]] 
  8.  
  9. >>> parser.add_argument('str',nargs='*',metavar='AAA'
  10. >>> parser.print_help() 
  11. usage: [-h] [AAA [AAA ...]] 
  12.  
  13. positional arguments: 
  14.   AAA 
  15.  
  16. optional arguments: 
  17.   -h, --help  show this help message and exit 

 

 


转自: http://blog.csdn.net/yatere/article/details/7304024

>>> parser.add_argument('--str',nargs='*',metavar='AAA')
>>> parser.print_help()
usage: [-h] [--str [AAA [AAA ...]]]

optional arguments:
  -h, --help            show this help message and exit
  --str [AAA [AAA ...]]

>>> parser.add_argument('str',nargs='*',metavar='AAA')
>>> parser.print_help()
usage: [-h] [AAA [AAA ...]]

positional arguments:
  AAA

optional arguments:
  -h, --help  show this help message and exit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值