我正在使用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语句。但是,我得到上面的错误
基本上,我想将它用作标志,并在没有提供值的情况下给出默认值。
答案 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
添加到add_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
。