zoukankan      html  css  js  c++  java
  • 【python3基础】命令行参数及 argparse

    在使用 argparse 解析 bool 参数时,需要设定 add_argument 的 action 参数为 'store_true' 或者 'store_false',而不是设定 type 参数为 bool,具体原因是,如果设定 type=bool,那么无论该参数传 True 还是 False,最后都只能得到 True。【这设定反人类】


    命令行参数及 argparse 包

    在我们需要控制不同分支代码的执行时,命令行参数最适用了,代码写好后只需在命令行设定不同的参数运行即可。

    在命令行参数的解析中,可以用到 argparse 包。

    入门 argparse 可以参考教程 https://docs.python.org/zh-cn/3.6/howto/argparse.html

    给出一个最简单的 argparse 解析命令行参数的例子:(以下代码保存在 tmp.py 文件中)

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--seed',
 dest='seed', type=int, default=0)
    args = parser.parse_args()
    print(args)
    

    通过在命令行执行python3 tmp.py --seed 1来改变 seed 参数的值,seed 参数的值可以通过args.seed获取。

    argparse 解析 bool 参数错误做法

    argparse 对 bool 类型数据的传递,和其它类型如 int、float、str 不一样,如下所示:

    import argparse
    parser = argparse.ArgumentParser()
    # 这种写法是错的,结果不是你所想象的
    parser.add_argument('--test',
 dest='test', type=bool, default=False)
    args = parser.parse_args()
    
print(args)
    

    如果我们在命令行执行python3 tmp.py --test Falsepython3 tmp.py --test True,我们会得到同样的结果,args.test 都会是 True。这有点反人类了。

    argparse 解析 bool 参数正确做法 1

    在传递 bool 值时,正确的做法是:

    import argparse
    parser = argparse.ArgumentParser()
    # action 的取值可以是 'store_true'、'store_false',都是小写
    parser.add_argument('--test',
 dest='test', action='store_true', default=False)
    parser.parse_args()
    
print(args)
    

    之后如果需要 test 参数为真,那么就在命令行执行python3 tmp.py --test,否则,就不要带上 test 参数,如python3 tmp.py

    argparse 解析 bool 参数正确做法 2

    import argparse
    

parser = argparse.ArgumentParser()


    
    parser.add_argument('--test',
 dest="test", action='store_true')
    
parser.add_argument('--no_test',
 dest="test", action='store_false')

    parser.set_defaults(test=False)

    
    args = parser.parse_args()
    
print(args)
    

    如果需要设置args.test为 True,那么执行python3 tmp.py --test;如果需要设置args.test为 False,执行 python3 tmp.py --no_test

    References

    Parsing boolean values with argparse - Stack Overflow

  • 相关阅读:
    Meet Hadoop
    C++常用函数
    Summary
    获得小黄衫感想
    课程作业(八)
    课程作业(七)
    课程作业(六)
    课程作业(五)
    课程作业(四)
    课程作业(三)
  • 原文地址:https://www.cnblogs.com/wuliytTaotao/p/11795011.html
Copyright © 2011-2022 走看看