代码之家  ›  专栏  ›  技术社区  ›  gaetano

检查命令行参数和用法。选项

  •  1
  • gaetano  · 技术社区  · 9 年前

    我正在使用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 是一个数字。如果用户不小心插入了一封信,他会得到以下信息:

    参数类型强制失败:具有基的int()的文本无效 10: “d”

    1 回复  |  直到 9 年前
        1
  •  1
  •   MLSC    9 年前

    为什么不使用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()