未提供值时命令行参数的默认值[重复]
Posted
技术标签:
【中文标题】未提供值时命令行参数的默认值[重复]【英文标题】:Default value of commandline parameters when no value is provided [duplicate] 【发布时间】:2014-08-07 23:06:11 【问题描述】:我正在使用 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 语句。但是,我得到了上面的错误.
基本上,我想将其用作标志并在未提供值的情况下提供默认值。
【问题讨论】:
【参考方案1】:使用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)
【讨论】:
【参考方案2】:在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"
。如果使用了--quality
,这会将args.quality
设置为True
。
【讨论】:
【参考方案3】:
docopt
在文档字符串中使用 [default: 0]
故意忽略您问题的argparse
部分,这里是您如何使用docopt
定义默认值。
使用docopt
,您可以将默认值(以及几乎所有其他值)定义为文档字符串的一部分。
首先,安装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
。
【讨论】:
以上是关于未提供值时命令行参数的默认值[重复]的主要内容,如果未能解决你的问题,请参考以下文章