2013-02-26 1 views
1

J'utilise optparse pour analyser les options de commande pour mon script. J'ai les options -f et -c qui nécessitent un argument d'option. Mais quand il manque, il traitera l'option suivante comme argument d'option pour l'option actuelle. par exemple.python optparse traiter l'option suivante comme l'argument de l'option en cours quand il manque

./myScript -f -c 

cette traitera "-c" comme argument d'option "-f" au lieu de se plaindre de l'argument option manquante pour "-f" et "-c". Pour les autres scénarios normaux, cela fonctionne correctement.

Merci pour toute information et solution!

mise à jour: solution, en utilisant argparse, ce problème peut être évité. il se termine avec une erreur se plaignant d'un argument manquant pour les options.

+0

Y at-il une raison particulière pour laquelle vous n'utilisez pas 'argparse'? Je crois que 'argparse' fera ce que vous voulez si vous utilisez le' action' kwarg; quelque chose comme ceci: 'parser.add_argument ('- f', action = 'store_true')' – bernie

+0

pas de raisons particulières. Je trouve juste optparse en premier lieu. J'ai juste essayé argparse, il montre une erreur lors de l'utilisation des options de cette façon. Merci! – nils

+0

** Note **: L'utilisation de * optparse * est déconseillée depuis la version 2.7 de python. Le module optparse est obsolète et ne sera pas développé davantage; le développement se poursuivra avec le module * argparse *. Voir [PEP 0389] (http://www.python.org/dev/peps/pep-0389/) pour plus d'informations. – shakaran

Répondre

0

optparse est dépréciée de python 2.7, vous devez donc utiliser le module argparse, qui a ce comportement construit en:

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('-f') 
parser.add_argument('-c') 

parser.parse_args(['-f', 'f_val', '-c', 'c_val']) #works as expected 
parser.parse_args(['-f', '-c'])      #errors as expected 

Si vous reste python < 2.7 et le module optparse, vous pouvez faites-le facilement avec une vérification personnalisée après l'étape d'analyse:

parser = OptionParser('usage') 
parser.add_option("-f", "--ff", dest="f_value") 
parser.add_option("-c", "--cc", dest="c_value") 

(options, args) = parser.parse_args() 

if options.f_value == '-c': 
    print 'error: -f requires an argument' 
    exit(1) 
+0

Je sais qu'il peut être résolu comme ceci, mais je me demande juste si j'ai manqué quelque chose qui résolvent ceci dans le module d'optparse. de toute façon, merci – nils

+0

@nils 'optparse' n'a pas cette capacité. J'ai mis à jour ma réponse pour refléter cela –

+0

vous avez raison, merci – nils

Questions connexes