我正在使用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 DATE
和END DATE
)(如果提供的话)一起提供。像这一行:
usage: test_arg.py [-h] [START_DATE END_DATE]
是否可以使用argparse
?
答案 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)
我认为这应该有用。