解析python参数getoptserror

时间:2015-11-20 17:18:32

标签: python

我使用GETOPTS来解析一个参数。

**

def main(argv):
    print 'main = ', argv
    outputfile = ''
    try:
        opts, args = getopt.getopt(argv,"hw:",["weblink="])
        print 'parsed correctly'
    except getopt.GetoptError:
        print 'parse_link.py -i <inputfile> -o <outputfile>'
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            print 'parse_link.py -w <SA or YAL> '
            sys.exit()
        elif opt in ("-w", "--weblink"):
            weblink = arg


    print 'weblink is "', weblink
if __name__ == "__main__":
   main(sys.argv[1:])

**

当我运行python test.py时 - 我期望GetoptError,因为我没有给出任何参数,但它成功解析了空格

1 个答案:

答案 0 :(得分:2)

如果您在示例中输入了错误的选项,则实际上是GetoptError。使用您自己修改的代码:

import sys, getopt

def main():
    print 'main = '
    outputfile = ''
    try:
        opts, args = getopt.getopt(sys.argv[1:],"hw:",["weblink="])
        print 'parsed correctly'
    except getopt.GetoptError:
        print 'parse_link.py -i <inputfile> -o <outputfile>'
        sys.exit(2)
   for opt, arg in opts:
        if opt == '-h':
            print 'parse_link.py -w <SA or YAL> '
            sys.exit()
        elif opt in ("-w", "--weblink"):
            print arg 


    print 'weblink is '
if __name__ == "__main__":
   main()

我运行这个python test.py -T输出将是:

main = 
parse_link.py -i <inputfile> -o <outputfile>

您还可以通过将GetoptError打印为str来查看错误,如下所示:

except getopt.GetoptError as err:
    print str(err)

输出:

main = 
option -t not recognized
parse_link.py -i <inputfile> -o <outputfile>

您希望在下面的代码中包含此内容,以便打印您的用法:

if len(sys.argv) <= 1:
    print 'parse_link.py -i <inputfile> -o <outputfile>'
    sys.exit(2)

以下更新的代码。

def main(argv):
    print 'main = ', argv
    outputfile = ''
    #Add usage as a string
    usage = 'parse_link.py -i <inputfile> -o <outputfile>'
    try:
        opts, args = getopt.getopt(argv,"hw:",["weblink="])
        print 'parsed correctly'
    except getopt.GetoptError:
        print usage
        sys.exit(2)

    if len(sys.argv) <= 1:
        print usage
        sys.exit(2)

    for opt, arg in opts:
        if opt == '-h':
            print 'parse_link.py -w <SA or YAL> '
            sys.exit()
        elif opt in ("-w", "--weblink"):
            weblink = arg


    print 'weblink is "', weblink
if __name__ == "__main__":
   main(sys.argv[1:])