Je veux avoir des options dans le module argparse, comme --pm-exportcependant lorsque j'essaye de l'utiliser comme args.pm-exportsi j'obtenais l'erreur qu'il n'y a pas d'attribut pm. Comment contourner ce problème? Est-il possible d'avoir des -options en ligne de commande?
Pour les actions d'argument facultatives, la valeur de dest est normalement déduite des chaînes d'options. ArgumentParser génère la valeur de dest en prenant la première longue chaîne d'options et en supprimant la --chaîne initiale . Tous les -caractères internes seront convertis en _caractères pour s'assurer que la chaîne est un nom d'attribut valide
Le rapport de bogue Python pertinent: bugs.python.org/issue15125 . argparseutilise setattret getattr, donc les destnoms ne doivent pas nécessairement être des dotnoms d'attributs valides . L'utilisateur peut également utiliser getattr.
hpaulj
5
Je ferais justepositional_arg = getattr( parser, 'positional-arg' )
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
Exactement ce dont j'avais besoin - je l'ai fait à l'envers metavaret je ne pouvais pas comprendre pourquoi cela ne fonctionnait pas. Merci!
dwanderson
17
Les tirets sont convertis en traits de soulignement:
Uniquement pour les arguments optionnels. Obligatoires pour conserver leurs traits d'union, il faut donc un trait de soulignement pour les rendre accessibles.
argparse
utilisesetattr
etgetattr
, donc lesdest
noms ne doivent pas nécessairement être desdot
noms d'attributs valides . L'utilisateur peut également utilisergetattr
.positional_arg = getattr( parser, 'positional-arg' )
metavar
et je ne pouvais pas comprendre pourquoi cela ne fonctionnait pas. Merci!Les tirets sont convertis en traits de soulignement:
la source