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