Python如何解析命令行参数

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • getopt:和C中的getopt()等价。optparse:2.7后已不推荐使用。argparse:基于optp...
    顾慎为阅读 12,797评论 1 10
  • sys.argv sys.argv[0]是脚本文件的名字,如:test.py sys.argv[1:]是以空格分割...
    f9f73935e28c阅读 21,222评论 0 0
  • 对CLI程序来说,参数解析大概是一个首要的问题。 当然,也有例外。 无参数脚本 许多常用命令,不需要输入参数,就可...
    匿蟒阅读 13,453评论 1 5
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,406评论 2 33
  • 1.放下恐惧。放下世俗观念,追随内心的声音,超出人们的固有期待;放 下恐惧担心犯错。谢丽尔:完成比完美更重要。有时...
    夜莺Christy阅读 1,238评论 0 0

友情链接更多精彩内容