Lorsque je lance parsePlotSens.py -s bw hehe
, il est indiqué que hehe
est un argument non reconnu. Cependant, si je lance parsePlotSens.py hehe -s bw
, tout va bien. Idéalement, j'aimerais que cela fonctionne dans les deux cas.
Des conseils? Voici mon code:
if __== '__main__' :
parser = argparse.ArgumentParser(prog='parsePlotSens');
parser.add_argument('-s', '--sort', nargs =1, action = 'store', choices = ['mcs', 'bw'], default='mcs', help=sorthelp)
parser.add_argument('filename', nargs ='+', action = 'store')
option = parser.parse_args(sys.argv)
Ne transmettez pas sys.argv
comme argument à parse_args
. Juste utiliser
option = parser.parse_args()
Si vous passez sys.argv
à parse_args
, le chemin ou le nom du script est le premier élément de sys.argv
et devient donc la valeur de option.filename
. La hehe
devient alors un argument inconnu.
Si vous omettez sys.argv
, parse_args
analysera sys.argv
comme prévu.
Vous pouvez contourner cela en autorisant des arguments inconnus
Remplacer
args = parser.parse_args()
avec
args, unknown = parser.parse_known_args()
De plus, en complément à la réponse de unutbu, stocker les arguments dans un dictionnaire de cette manière facilite les tests:
args = vars(parser.parse_args())
print args
Imprime le dictionnaire:
{'sort': ['bw'], 'filename': ['hehe']}
Comme :
if args['sort'] == 'bw':
# code here
...
Ma situation n'est pas la même chose avec la question, mais l'erreur est la même.
Ma situation:
la commande python a un saut de ligne avec \
dans mon fichier bash, comme
python args_config.py \
--arg1="hello" \
--arg2="world"
et déclenchez une erreur python argparse: unrecognized arguments
args not found.
le problème est que la rupture de ligne de fichier bash est différente dans Windows et Linux,
il suffit de régler avec pycharm File -> Line Separators -> LF - Unix and OS X (\n)
télécharger sur linux et lancer le fichier bash, ça marche!