Python可选参数对

mtr*_*ean 6 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')
Run Code Online (Sandbox Code Playgroud)

这使

> python test_arg.py -h
usage: test_arg.py [-h] [START DATE] [END DATE]
Run Code Online (Sandbox Code Playgroud)

但是我希望将这对可选参数(START DATEEND DATE)(如果提供的话)一起提供.沿着这条线:

usage: test_arg.py [-h] [START_DATE END_DATE]
Run Code Online (Sandbox Code Playgroud)

有可能argparse吗?

hpa*_*ulj 9

我能想到的最接近的是:

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())
Run Code Online (Sandbox Code Playgroud)

哪个产生

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
Run Code Online (Sandbox Code Playgroud)

没有办法指定 - 'require these 2 arguments together'. nargs=2指定2个参数,但不使它们成为可选的(nargs=[0,2]已经提出了一个表单,但没有将其合并到任何发行版中).所以--dates需要使它成为可选的.为了产生这个帮助,metavar必须是一个元组(尝试使用列表来查看我的意思).而这tuple metavar仅适用于optionals(不positionals).