web-dev-qa-db-fra.com

python argparse: arguments non reconnus

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)
23
Yan Zhu

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.

41
unutbu

Vous pouvez contourner cela en autorisant des arguments inconnus

Remplacer

args = parser.parse_args()

avec 

args, unknown = parser.parse_known_args()
7
FacePalm

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

...
4
Gauthier Boaglio

Ma situation n'est pas la même chose avec la question, mais l'erreur est la même.

Ma situation:

  1. J'ai un dev à distance (SFTP) avec Windows Pycharm, et télécharger pour fonctionner avec Linux.
  2. 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!

0
Colin Wang