1

为了给我的 python 脚本提供选项,我想介绍一些参数。我发现在 python 中执行此操作的更好方法是使用 getopt,但是一旦我运行我的脚本,它就什么也不做。请帮我!!!。这是我的代码:

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:])
4

3 回答 3

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在文件名之前提供!

于 2011-08-13T06:32:17.003 回答
3

您可以使用optparse(旧版本,将在 python 2.7 之后弃用)或 argparse(新版本),它们是标准的 python 模块解析参数。

希望它首先对此有所帮助

于 2011-08-13T05:53:56.190 回答
0

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

基本上,您需要从中删除'python'opts因为它是列表的第一个元素optsopts.pop(0)然后您应该没问题。

于 2015-09-19T16:39:12.903 回答