无法通过getopt处理参数 python

1 投票
3 回答
5814 浏览
提问于 2025-04-16 23:31

为了给我的Python脚本提供一些选项,我想引入一些参数。我发现用getopt这个方法在Python中比较好,但当我运行我的脚本时,它什么都不做。请帮帮我!!!这是我的代码:

def main(argv):
     try:
            opts, args = getopt.getopt(argv, 'hi:o:t', ['help', 'input=', 'output='])
    except getopt.GetoptError:
            usage()
            sys.exit(2)
            file = None
            outfile = None
    for opt, arg in opts:
            if opt in ('-h', '--help'):
                    usage()
                    sys.exit(2)
            elif opt in ('-i', '--input'):
                    file = arg
            elif opt in ('-o', '--output'):
                    outfile = arg
            elif opt == '-t':
                    maininfo(file,outfile)
            else:
                    usage()
                    sys.exit(2)

if __name__ =='__main__':
    main(sys.argv[1:])

3 个回答

0

请查看这个回答:https://stackoverflow.com/a/1540399/2542738

简单来说,你需要把 'python'opts 里去掉,因为它是列表 opts 的第一个元素。你可以用 opts.pop(0) 来做到这一点,这样就没问题了。

3

你可以使用 optparse(这是一个旧版本,Python 2.7 之后会被淘汰)或者 argparse(这是一个新版本),这两个都是Python的标准模块,用来解析命令行参数。

希望这对你有帮助。

5

我建议你增加更多的日志记录。这不仅能帮助你现在调试,还能帮助将来使用你脚本的人。

def main(argv):
    filename = None
    outfile = None
    call_maininfo = False
    try:
        opts, args = getopt.getopt(argv, 'hi:o:t', ['help', 'input=', 'output='])
        if not opts:
            print 'No options supplied'
            usage()
    except getopt.GetoptError, e:
        print e
        usage()
        sys.exit(2)
    for opt, arg in opts:
        if opt in ('-h', '--help'):
            usage()
            sys.exit(2)
        elif opt in ('-i', '--input'):
            filename = arg
        elif opt in ('-o', '--output'):
            outfile = arg
        elif opt == '-t':
            call_maininfo = True
        else:
            usage()
            sys.exit(2)

    print 'Processed options [{0}] and found filename [{1}] and outfile [{2}]'.format(
            ', '.join(argv),
            filename,
            outfile,
            )

    if call_maininfo:
        print 'Calling maininfo()'
        maininfo(filename, outfile)

我还把调用 maininfo() 的地方移出了循环,因为你可以在文件名之前提供 -t

撰写回答