web-dev-qa-db-fra.com

Avoir des options dans argparse avec un tiret

Je veux avoir certaines options dans le module argparse telles que --pm-export cependant quand j'essaye de l'utiliser comme args.pm-export Je vois 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 ligne de commande?

114
Cemre

Comme indiqué dans la argparsedocs :

Pour les actions d'argument optionnel, la valeur de dest est normalement déduite des chaînes d'option. ArgumentParser génère la valeur de dest en prenant la première chaîne d'option longue et en supprimant la valeur initiale -- chaîne . Toute interne - caractères seront convertis en _ caractères pour s’assurer que la chaîne est un nom d’attribut valide

Donc, vous devriez utiliser args.pm_export.

170
Thomas Orozco

Malheureusement, le remplacement par tiret-soulignement ne fonctionne pas pour les arguments positional (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 devriez utiliser le dernier argument de add_argument() comme nom d'attribut et metavar kwarg pour définir son apparence 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>])
82
seriyPS

Les tirets sont convertis en traits de soulignement:

import argparse
pa = argparse.ArgumentParser()
pa.add_argument('--foo-bar')
args = pa.parse_args(['--foo-bar', '24'])
print args # Namespace(foo_bar='24')
16
georg