2016-02-11 1 views
1

Je développe un programme qui reçoit des arguments et voudraient faire certains d'entre eux nécessaires, mais je steping dans certains problèmes:optparse et beaucoup de sinon

  1. Je dois vraiment faire le code Python 2.4.x conforme, donc je (au moins penser que) ne peut utiliser optparse
  2. voudrais éviter l'obscurité de code

Voici ce que je fait:

def usage(): 
    parser = OptionParser() 
    parser.add_option('-i', '--item', dest='item') 
    parser.add_option('-m', '--monitor', dest='monitor') 
    parser.add_option('-s', '--service', dest='service') 
    parser.add_option('-u', '--status', dest='status') 
    parser.add_option('-a', '--match', dest='match') 
    parser.add_option('-v', '--value', dest='value') 
    parser.add_option('-o', '--hostname', dest='hostname', default='') 
    parser.add_option('-t', '--test', action='store_true', dest='test') 
    parser.add_option('-U', '--url', dest='URL', default='') 
    parser.add_option('--verbose', action='store_true', dest='verbose') 

    (options, args) = parser.parse_args() 

    if not options.item or not options.monitor or not options.service or \ 
          not options.status or not options.match or \ 
          not options.value: 
     parser.print_help() 
     sys.exit(-1) 

    return options 

Je suppose que c'est OK, mais je ne pense vraiment pas que ce soit Pythonic. Existe-t-il un meilleur moyen de vérifier cette condition?

Cheers,

Répondre

5

Vous pouvez définir un éventail d'options nécessaires, comme ...

required_options = [options.monitor, options.service, ...] 

et vérifier

if not all(required_options): 
    ... 
+0

Fonctionne bien, merci. Je suppose que nous ne pouvons pas aller plus Pythonic que ceci, sauf si un meilleur module est utilisé. – mvarge

0

Vous pouvez en faire un peu plus agréable avec:

if None in (options.monitor, options.service, options.status, options.match, 
      options.value): 

Mais si vous êtes limité à optparse il est conçu pour gérer les arguments facultatifs, il ne semble pas être un meilleure façon de le faire.

+1

Je pense que vous voulez dire 'si aucun en (...):'; L'option par défaut sauf si spécifié est 'None' pas' False', l'expression ci-dessus n'évaluera jamais True. – SiHa

+0

Bon point, l'a changé. – Amoss