Python如何解析命令行参数

作者: handyTOOL | 来源:发表于2016-09-10 14:44 被阅读0次

    本文使用的运行环境为 Python3

    我们在用Python写命令行工具的时候,难免要让工具接受外部参数或者option选项。比如这样一个工具,接受-h -c --count --verbose四个option选项。-h显示帮助,-c或者--count向命令行工具传递参数count,--verbose显示额外输出信息。

    ./tool.py -h
    ./tool.py -c 3
    ./tool.py --count 3
    ./tool.py --verbose
    

    上面列举了四种使用情况。接下来我们就看代码。

    import getopt
    import sys
    
    def main(argv):
        try:
            opts, args = getopt.getopt(argv, "hc:", ["count=", "verbose"])
        except getopt.GetoptError:
            sys.exit(2)
        for opt, arg in opts:
            if opt in ['-h']:
                print('this is help')
            elif opt in ['-c','--count']:
                print('count is {0}'.format(arg))
            elif opt in ['--verbose']:
                print('verbose is enable')
    
    if __name__ == '__main__':
        main(sys.argv[1:])
    
    

    我们使用getopt来处理命令行参数,因为sys.argv第一个值是可执行文件路径,所以从第二个值开始处理。

    main(sys.argv[1:])
    ...
    opts, args = getopt.getopt(argv, "hc:", ["count=", "verbose"])
    

    我们再来看看"hc:",和["count=", "verbose"]这两个参数。
    "hc:"表示的是短option列表,如果短option携带了参数,后面加上:,比如c:,反之不带:,比如h
    ["count=", "verbose"]表示的是长option列表,如果长option携带了参数,后面加上=,比如count=,反之不带=,比如verbose
    接下来就是根据不同的option和arg来执行相应的逻辑。

    for opt, arg in opts:
            if opt in ['-h']:
                print('this is help')
            elif opt in ['-c','--count']:
                print('count is {0}'.format(arg))
            elif opt in ['--verbose']:
                print('verbose is enable')
    

    opts是(opt,opt_arg)的数组,所以可以通过for opt, arg in opts:直接遍历处理。
    opts, args = getopt.getopt(argv, "hc:", ["count=", "verbose"])中还返回了args,这里面放的是非option的参数。读者可以自己动手看一下里面的值是什么。

    相关文章

      网友评论

        本文标题:Python如何解析命令行参数

        本文链接:https://www.haomeiwen.com/subject/trvyettx.html