Python语言与信息数据获取和机器学习

Python如何解析命令行参数

2016-09-10  本文已影响0人  handyTOOL

本文使用的运行环境为 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的参数。读者可以自己动手看一下里面的值是什么。

上一篇下一篇

猜你喜欢

热点阅读