Pourquoi ne pas getopt travailler si sys.argv est passé complètement?
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?
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).