Je veux avoir des options dans le module argparse telles que --pm-export
Cependant, lorsque j'essaie de l'utiliser comme args.pm-export
J'obtiens l'erreur qu'il n'y a pas d'attribut pm
. Comment puis-je contourner ce problème ? Est-il possible d'avoir -
dans les options de la ligne de commande ?
Réponses
Trop de publicités?Comme indiqué dans le argparse
docs :
Pour les actions à arguments optionnels, 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 chaîne d'options longue et en enlevant l'initiale
--
chaîne de caractères . Tout interne-
Les caractères seront convertis en_
caractères pour s'assurer que la chaîne est un nom d'attribut valide
Vous devriez donc utiliser args.pm_export
.
Malheureusement, le remplacement du tiret par la sous-cote ne fonctionne pas pour les arguments positionnels (non préfixés par --
) comme
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('logs-dir',
help='Directory with .log and .log.gz files')
parser.add_argument('results-csv', type=argparse.FileType('w'),
default=sys.stdout,
help='Output .csv filename')
args = parser.parse_args()
print args
# gives
# Namespace(logs-dir='./', results-csv=<open file 'lool.csv', mode 'w' at 0x9020650>)
Donc, vous devez utiliser le premier argument pour add_argument()
comme nom d'attribut et metavar
kwarg pour définir comment il doit apparaître dans l'aide :
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('logs_dir', metavar='logs-dir',
nargs=1,
help='Directory with .log and .log.gz files')
parser.add_argument('results_csv', metavar='results-csv',
nargs=1,
type=argparse.FileType('w'),
default=sys.stdout,
help='Output .csv filename')
args = parser.parse_args()
print args
# gives
# Namespace(logs_dir=['./'], results_csv=[<open file 'lool.csv', mode 'w' at 0xb71385f8>])
getattr(args, 'positional-arg')
Il s'agit d'une autre solution de contournement acceptable pour les arguments positionnels :
#!/usr/bin/env python3
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('a-b')
args = parser.parse_args(['123'])
assert getattr(args, 'a-b') == '123'
Testé sur Python 3.8.2.