使用 usage.Options 检查命令行参数

Checking command-lines parameters with usage.Options

我正在使用 usage.Options 解析和检查命令行参数。

#!/usr/bin/python

from twisted.python import usage
import sys

class Options(usage.Options):
    """
       Defines the default input parameters
    """
    optParameters = [
            ["param", "p", 1, "Int Parameter", int],
        ]

if __name__ == "__main__":

    options = Options()
    try:
        options.parseOptions()
    except Exception, e:
        print '%s: %s' % (sys.argv[0], e)
        print '%s: Try --help for usage details.' % (sys.argv[0])
        sys.exit(1)
    else:
        if options['param'] < 0 or options['param'] > 10: 
            print "param out of the range [0,10]"
            sys.exit(1)

我不知道如何检查输入 param 的值是否为数字。如果用户不小心插入了一个字母,他会得到这个:

Parameter type enforcement failed: invalid literal for int() with base 10: 'd'

为什么不使用 optparse?

from optparse import OptionParser
options, args = parser.parse_args()

def args():
    parser = OptionParser(usage='usage: %prog [options]', version='%prog 1.0.0')
    parser.add_option(.....)
    return parser

更新:

你可以拥有这样的东西。添加和替换你想要的一切:

class Main:
    def __init__(self):
        parser = self.get_arg()
        self.set_arg(parser)

    def set_arg(self, parser):
        options, args = parser.parse_args()
        if len(sys.argv) == 1:
            print 'Error: Usage: python %s <options>' % sys.argv[0]
            sys.exit()
        input_file = options.input_file
        flag = options.flag

    def get_arg(self):
        parser = OptionParser(usage='usage: %prog [options]', version='%prog 1.1.0')
        parser.add_option('-i', '--input-file', action='store', type='string', dest='input_file', default=None,
                            help='Input file.')
        parser.add_option('-f', '--flag', action='store_true', dest='flag', default=False,
                            help='A flag in your app')
        return parser

if __name__ == '__main__':
    Main()