Optparse和很多,如果没有

时间:2016-02-11 11:27:38

标签: python optparse

我正在开发一个接收一些参数的程序,并希望将其中一些作为参考,但我正在解决一些问题:

  1. 我真的需要使代码Python 2.4.x兼容,所以我(至少认为)只能使用optparse
  2. 想避免代码模糊
  3. 这就是我所做的:

    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
    

    我想这可以,但我真的不认为这是Pythonic。有没有更好的方法来进行这种条件检查?

    干杯,

2 个答案:

答案 0 :(得分:5)

您可以定义所需选项的数组,例如......

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

并检查

if not all(required_options):
    ...

答案 1 :(得分:0)

你可以通过以下方式使它变得更好:

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

但是如果你只限于optparse那么它被设计为处理可选参数,似乎没有更好的方法来做到这一点。