未提供值时的命令行参数的默认值

时间:2014-06-17 19:53:29

标签: python command-line-arguments argparse

我正在使用ArgParse在Python中提供命令行参数。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--quality", type=int,help="enter some quality limit")
args = parser.parse_args()
qual=args.quality

if args.quality:
  qual=0

$ python a.py --quality 

a.py: error: argument --quality: expected one argument

如果没有提供任何值,我想将它用作0,我也尝试在parser.add_argument中将其设置为“default = 0”,并且还使用if语句。但是,我得到上面的错误

基本上,我想将它用作标志,并在没有提供值的情况下给出默认值。

3 个答案:

答案 0 :(得分:8)

使用nargs='?'允许--quality与0或1提供的值一起使用。使用const=0处理script.py --quality而不提供值。使用default=0处理对script.py的裸呼叫(未提供--quality)。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--quality", type=int, help="enter some quality limit",
                    nargs='?', default=0, const=0)
args = parser.parse_args()
print(args)

表现得像这样:

% script.py 
Namespace(quality=0)
% script.py --quality
Namespace(quality=0)
% script.py --quality 1
Namespace(quality=1)

答案 1 :(得分:1)

https://docs.python.org/2/howto/argparse.html#id1处获得战利品。只需将参数default添加到a​​dd_argument调用。

parser.add_argument("--quality", type=int, default=0, nargs='?', help="enter some quality limit")

如果您想使用--quality作为标记,则应使用action="store_true"。如果使用args.quality,这会将True设置为--quality

答案 2 :(得分:-1)

docopt在docstring

中使用[default: 0]

故意忽略问题的argparse部分,以下是使用docopt定义默认值的方法。

使用docopt,您可以将默认值(以及几乎所有其余值)定义为docstring的一部分。

首先,安装docopt并验证值schema

$ pip install docopt schema

然后编写脚本a.py

"""
Usage:
    a.py [--quality <qlimit>]
    a.py -h

Options:
    --quality=<qlimit>  Quality limit [default: 0]
"""
def main(quality):
    print "FROM MAIN: minimal quality was set to", quality

if __name__ == "__main__":
    from docopt import docopt
    from schema import Schema, And, Use, SchemaError
    args = docopt(__doc__)
    print args
    schema = Schema({
        "--quality": 
        And(Use(int), lambda n: 0 <= n, error="<qlimit> must be non-negative integer"),
        "-h": bool
    })
    try:
        args = schema.validate(args)
    except SchemaError as e:
        exit(e)
    quality = args["--quality"]
    main(quality)

并使用脚本,首先请求帮助字符串:

$ python a.py -h
Usage:
    a.py [--quality <qlimit>]
    a.py -h

Options:
    --quality=<qlimit>  Quality limit [default: 0]

然后使用默认值:

$ python a.py
{'--quality': '0',
 '-h': False}
FROM MAIN: minimal quality was set to 0

将非默认正确的1设置为5:

$ python a.py --quality 5
{'--quality': '5',
 '-h': False}
FROM MAIN: minimal quality was set to 5

尝试不允许负值:

$ python a.py --quality -99
{'--quality': '-99',
 '-h': False}
<qlimit> must be non-negative integer

或非整数:

$ python a.py --quality poor
{'--quality': 'poor',
 '-h': False}
<qlimit> must be non-negative integer

请注意,只要validate步骤通过,“ - quality”键的值就已转换为int