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