web-dev-qa-db-fra.com

'required' n'est pas un argument valide pour les positions dans la commande python

Je veux implémenter la fonction d'importation avec les paramètres obligatoires et facultatifs, pour exécuter cela de cette manière:

python manage.py import --mode archive

--mode est obligatoire et archive également.

J'utilise la bibliothèque argparse.

class Command(BaseCommand):
    help = 'Import'

    def add_arguments(self, parser):
        parser.add_argument('--mode',
            required=True,
        )
        parser.add_argument('archive',
            required=True,
            default=False,
            help='Make import archive events'
        )

Mais j'ai reçu une erreur:

TypeError: 'required' is an invalid argument for positionals
12
Kai

Vous avez créé un argument positionnel (pas de -- option devant le nom). Les arguments positionnels sont toujours requis. Vous ne pouvez pas utiliser required=True pour de telles options, déposez simplement le required. Déposez également le default; un argument requis ne peut pas avoir de valeur par défaut (il ne sera jamais utilisé de toute façon):

parser.add_argument('archive',
    help='Make import archive events'
)

Si vous vouliez que archive soit un commutateur de ligne de commande, utilisez --archive au lieu.

17
Martijn Pieters

Je pense que --mode archive est censé signifier "le mode est archive", en d'autres termes archive est le valeur du --mode argument, pas un argument séparé. Si tel était le cas, il faudrait que ce soit --archive ce n'est pas ce que vous voulez.

Oubliez simplement la définition de archive.

2
BoarGules