Optparse 和很多 if not
Optparse and a lot of if not
我正在开发一个接收一些参数的程序,并希望其中一些参数成为必需的,但我遇到了一些问题:
- 我真的需要让代码 Python 2.4.x 兼容,所以我(至少认为)只能使用 optparse
- 希望避免代码模糊
这是我做的:
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。有没有更好的方法来进行这种条件检查?
干杯,
您可以通过以下方式让它变得更好:
if None in (options.monitor, options.service, options.status, options.match,
options.value):
但是如果你仅限于 optparse 那么它被设计用来处理可选参数,似乎没有更好的方法来做到这一点。
您可以定义一系列必需的选项,例如...
required_options = [options.monitor, options.service, ...]
并检查
if not all(required_options):
...
我正在开发一个接收一些参数的程序,并希望其中一些参数成为必需的,但我遇到了一些问题:
- 我真的需要让代码 Python 2.4.x 兼容,所以我(至少认为)只能使用 optparse
- 希望避免代码模糊
这是我做的:
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。有没有更好的方法来进行这种条件检查?
干杯,
您可以通过以下方式让它变得更好:
if None in (options.monitor, options.service, options.status, options.match,
options.value):
但是如果你仅限于 optparse 那么它被设计用来处理可选参数,似乎没有更好的方法来做到这一点。
您可以定义一系列必需的选项,例如...
required_options = [options.monitor, options.service, ...]
并检查
if not all(required_options):
...