Je suis en train d'utiliser le module argparse pour extraire les arguments de celle-ci, mais la mise en œuvre naïve ne réussit pas lorsqu'il est appelé avec l'interpréteur python:Python argparse lorsqu'il est invoqué de python intepreter
1 import argparse
2 import sys
3
4 parser = argparse.ArgumentParser(description="some test program")
5 parser.add_argument('--some-option', action="store", dest="some_option")
6
7 parsed_args = parser.parse_args(sys.argv)
8 print(vars(parsed_args)
Il échoue parce qu'il détecte le premier argument que le nom du script - dans ce cas « test.py »:
~$: python3 ./test.py --some-option=5
usage: test.py [-h] [--some-option INPUT]
test.py: error: unrecognized arguments: ./test.py
la solution que j'ai trouvé à l'heure actuelle est de rechercher et de supprimer les scripts python nom des arugments, mais cela semble comme un hack unelegant, et aura des problèmes si le premier argument peut légitimer imately un fichier python:
1 import argparse
2 import sys
3
4 parser = argparse.ArgumentParser(description="some test program")
5 parser.add_argument('--some-option', action="store", dest="some_option")
6
7 print(sys.argv)
8 if sys.argv[0].find('.py') != -1:
9 args = sys.argv[1:]
10 else:
11 args = sys.argv
12
13 parsed_args = parser.parse_args(args)
14 print(vars(parsed_args)
Y at-il une meilleure façon de se débarrasser de ce nom de fichier python satanés lors de l'utilisation argparse
Note: Je ne peux pas me débarrasser de l'appel à la intepreter parce que cela fait partie d'un système de construction multi-plateforme, et a donc un makefile qui définit l'exécutable python à python3 ou python3.exe en fonction du système d'exploitation.
Vous avez raison. J'avais supposé que si vous invoquiez le script directement, il n'aurait pas le script python comme argument de sys.argv - mais bien sûr, les concepteurs de python sont des gens intelligents ..... – sdfgeoff