Подтвердить что ты не робот

Как сделать аргумент команды управления Django не обязательным?

Я пытаюсь написать пользовательскую команду управления в django, как показано ниже -

class Command(BaseCommand):

    def add_arguments(self, parser):
        parser.add_argument('delay', type=int)

    def handle(self, *args, **options):
        delay = options.get('delay', None)
        print delay

Теперь, когда я запускаю python manage.py mycommand 12, он печатает 12 на консоли. Что хорошо.

Теперь, если я пытаюсь запустить python manage.py mycommand, тогда я хочу, чтобы команда печатала 21 на консоли по умолчанию. Но это дает мне что-то вроде этого -

usage: manage.py mycommand [-h] [--version]
                           [-v {0,1,2,3}]
                           [--settings SETTINGS]
                           [--pythonpath PYTHONPATH]
                           [--traceback]
                           [--no-color]
                           delay

Итак, как мне сделать аргумент команды "не требуется" и принять значение по умолчанию, если значение не указано?

4b9b3361

Ответ 1

Один из рецептов документации предлагает:

Для позиционных аргументов с nargs, равными ? или *, значение default используется, если аргумент командной строки отсутствует.

Итак, следующее должно делать трюк (оно будет возвращать значение, если указано или значение по умолчанию в противном случае):

parser.add_argument('delay', type=int, nargs='?', default=21)

Использование:

$ ./manage.py mycommand
21
$ ./manage.py mycommand 4
4