Python可选参数对

时间:2013-11-06 06:01:28

标签: python argparse

我正在使用argparse模块获取两个可选的命令行参数:

parser.add_argument('start_date', nargs='?', metavar='START DATE',
                   help='start date in YYYY-MM-DD')
parser.add_argument('end_date', nargs='?', metavar='END DATE',
                   help='end date in YYYY-MM-DD')

给出了

> python test_arg.py -h
usage: test_arg.py [-h] [START DATE] [END DATE]

但是我希望这对可选参数(START DATEEND DATE)(如果提供的话)一起提供。像这一行:

usage: test_arg.py [-h] [START_DATE END_DATE]

是否可以使用argparse

3 个答案:

答案 0 :(得分:8)

我能提出的最接近的是:

parser=argparse.ArgumentParser()
parser.add_argument('--dates', nargs=2, metavar=('START DATE','END_DATE'),
                   help='start date and end date in YYYY-MM-DD')
print(parser.format_help())

产生

usage: stock19805170.py [-h] [--dates START DATE END_DATE]

optional arguments:
  -h, --help            show this help message and exit
  --dates START DATE END_DATE
                        start date and end date in YYYY-MM-DD

没有办法指定 - 'require these 2 arguments together'nargs=2指定2个参数,但不会使它们成为可选的(已建议nargs=[0,2]表单但未包含在任何发行版中)。因此需要--dates才能使其成为可选项。为了产生这个帮助,metavar必须是一个元组(尝试使用列表来查看我的意思)。并且tuple metavar仅适用于optionals(非定位)。

答案 1 :(得分:1)

我认为这样做的唯一方法就是亲自检查:

if (not parser.start_date) != (not parser.end_date):
    print("Error: --start_date and --end_date must be used together.")
    arg_parser.print_usage()
    sys.exit(-1)

不幸的是,这没有反映在帮助信息中。

答案 2 :(得分:0)

尝试添加default = None作为变量

parser.add_argument('start_date', nargs='?', metavar='START DATE',
                   help='start date in YYYY-MM-DD', default=None)
parser.add_argument('end_date', nargs='?', metavar='END DATE',
                   help='end date in YYYY-MM-DD', default=None)

我认为这应该有用。