Question

Si j'utilise cela avec getopt:

import getopt
import sys

opts,args = getopt.getopt(sys.argv,"a:bc")
print opts
print args

opts sera vide. Aucun tuples sera créé. Par contre, si je vais utiliser sys.argv[1:], tout fonctionne comme prévu. Je ne comprends pas pourquoi. Quelqu'un veut expliquer?

Était-ce utile?

La solution

Le premier élément de sys.argv (sys.argv[0]) est le nom du script en cours d'exécution. Parce que ce nom de script est (probablement) pas un argument valable (et probablement ne commence pas par un - ou -- de toute façon), getopt ne reconnaît pas comme un argument. En raison de la nature de la façon dont getopt fonctionne, quand il voit quelque chose qui n'est pas un drapeau de ligne de commande (quelque chose qui ne commence pas par - ou --), il arrête le traitement des options de ligne de commande (et met le reste des arguments en args ), car il suppose que le reste des arguments sont des articles qui seront traitées par le programme (tels que des noms de fichiers ou d'autres « nécessaires » arguments).

Autres conseils

Il est par la conception. Rappelons que sys.argv [0] est le nom du programme en cours d'exécution, et getopt ne veut pas.

A partir de la documentation:

  

options de ligne parse de commande et   Liste des paramètres. args est l'argument   liste à analyser, sans leader   référence au programme en cours.   En règle générale, cela signifie sys.argv [1:].   options est la chaîne de l'option   lettres que le script veut   reconnaître, avec des options qui nécessitent   un argument suivi de deux points ( « : »;   à savoir, le même format que Unix   getopt () utilise).

http://docs.python.org/library/getopt.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top