2014-02-24 151 views
31

我正在创建一个python脚本,我希望有一个参数可以控制您输出的搜索结果的数量。我目前命名参数--head。这是我想它具备的功能:如何使用argparse为参数设置一个可选的值?

  1. --head没有在命令行中传递我想它默认为一个值。在这种情况下,一个相当大的,如80

  2. --head传递没有任何价值,我希望它默认为另一个值。在这种情况下,有限的东西,如10

  3. --head传递一个值,我希望它存储它传递的值。

下面是一些代码说明问题:

>>> import argparse 
>>> parser = argparse.ArgumentParser() 
>>> parser.add_argument('-h', 
         '--head', 
         dest='size', 
         const=80, 
         default=10, 
         action="I don't know", 
         help='Only print the head of the output') 
>>> # OFC, that last line will fail because the action is uknown, 
... # but here is how I'd like it to work 
... parser.parse_args(''.split()) 
Namespace(size=80) 
>>> parser.parse_args('--head'.split()) 
Namespace(size=10) 
>>> parser.parse_args('--head 15'.split()) 
Namespace(size=15) 

我知道我大概可以写这样的自定义操作,但我首先要看看是否有任何违约行为做到这一点。

回答

39

经过多一点阅读文件后,我发现我需要:nargs='?'。 这与store操作一起使用,并且完全符合我的要求。

下面是一个例子:

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('--head', 
        dest='size', 
        const=10, 
        default=80, 
        action='store', 
        nargs='?', 
        type=int, 
        help='Only print the head of the output') 
print(parser.parse_args(''.split())) 
# output: Namespace(size=80) 
print(parser.parse_args('--head'.split())) 
# output: Namespace(size=10) 
print(parser.parse_args('--head 15'.split())) 
# output: Namespace(size=15) 

源:http://docs.python.org/3.3/library/argparse.html#nargs

+0

优秀。它甚至支持'*'和'+',并且可以从知识正则表达式中预期结果。 –

相关问题