argparse с двумя аргументами даты - PullRequest
1 голос
/ 06 августа 2020

Я хочу создать программу, которая выбирает пользователей из базы данных между двумя датами, указанными в командной строке. У меня есть:

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 у меня есть запрос на получение пользователей между двумя датами. К сожалению, это решение не работает, и я получаю сообщение об ошибке: argument --date2/-d2: not allowed with argument --date1/d1

Я запускал такую ​​программу, как: py main.py -d1 1994-01-01 -d2 1995-12-31

Я думал, что могу разделить эти 2 даты для перечисления в функции и дать только 1 аргумент, например: py main.py -d 1994-01-01 1995-12-31, но эта идея тоже не работает. Есть ли простой способ использовать 2 аргумента, которые нужно передать вместе?

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Вы ищете инклюзивность , а не эксклюзивность . Вы можете выполнить sh это, используя nargs=2 с одним вариантом, как и в вашем втором случае.

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
Namespace(date=['1994-01-01', '1995-12-31'])

$ ./tmp.py -d 1994-01-01
usage: tmp.py [-h] [--date start end]
tmp.py: error: argument --date/-d: expected 2 arguments

$ ./tmp.py -d 1994-01-01 1995-12-31 1998
usage: tmp.py [-h] [--date start end]
tmp.py: error: unrecognized arguments: 1998

$ ./tmp.py -h
usage: tmp.py [-h] [--date start end]
optional arguments:
  -h, --help            show this help message and exit
  --date start end, -d start end
                        Show users between start and end dates
1 голос
/ 06 августа 2020

Вы можете использовать

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
...