Python 带有2个日期参数的argparse

Python 带有2个日期参数的argparse,python,argparse,Python,Argparse,我想创建一个程序,从命令行中给定的两个日期之间的数据库中选择用户。我有: import argparse parser = argparse.ArgumentParser() group = parser.add_mutually_exclusive_group() group.add_argument("--date1","-d1",help="Show users between dates",type=str) group.a

我想创建一个程序,从命令行中给定的两个日期之间的数据库中选择用户。我有:

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()

group.add_argument("--date1","-d1",help="Show users between dates",type=str)
group.add_argument("--date2","-d2",help="Show users between dates",type=str)

if args.date1 and args.date2:
    DataCalculation.show_users_between_date(args.date1,args.date2)
在我的DataCalculation中,我有一个查询来获取两个日期之间的用户。 不幸的是,这个解决方案不起作用,我得到一个错误:
参数--date2/-d2:不允许参数--date1/d1

我运行的程序如下:
py main.py-d1 1994-01-01-d2 1995-12-31

我在想,我可以将这两个日期拆分为函数中的列表,并只给出一个参数,如:
py main.py-d1994-01-011995-12-31
,但这种想法不太管用。有没有一种简单的方法可以使用两个必须同时给出的参数?

您可以使用

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()

group.add_argument("--daterange","-dr",help="Show users between dates",type=str)
args = parser.parse_args()

date1, date2 = args.daterange.split()
print(date1)
然后引用你的论点,如

python test.py -dr "1994-01-01 1995-12-31"
这将产生上述代码片段:

1994-01-01
你要的是包容性,而不是排他性。您可以通过使用一个选项来实现这一点,就像您的第二个案例一样

import argparse

parser = argparse.ArgumentParser()
parser.add_argument(
    "--date",
    "-d",
    nargs=2,
    metavar=('start', 'end'),  # Describes each argument
    help="Show users between start and end dates",
    )
args = parser.parse_args()
print(args)
用法:

$。/tmp.py-d 1994-01-01 1995-12-31
名称空间(日期=['1994-01-01','1995-12-31']
美元/tmp.py-d 1994-01-01
用法:tmp.py[-h][--date start-end]
tmp.py:错误:参数--date/-d:应为2个参数
美元/tmp.py-d 1994-01-01 1995-12-31 1998
用法:tmp.py[-h][--date start-end]
tmp.py:错误:无法识别的参数:1998
$./tmp.py-h
用法:tmp.py[-h][--date start-end]
可选参数:
-h、 --帮助显示此帮助消息并退出
--日期开始结束,-d开始结束
显示开始日期和结束日期之间的用户

您要求添加互斥组。这意味着您只能为该组选择一项。如果你想两者兼得,不要让它们相互排斥。是的。。。你的代码不能正常工作。但您想阅读以下内容: