【python3基础】命令行参数及 argparse
目录
在使用 argparse 解析 bool 参数时,需要设定 add_argument 的 action 参数为 'store_true' 或者 'store_false',而不是设定 type 参数为 bool,具体原因是,如果设定 type=bool,那么无论该参数传 true 还是 false,最后都只能得到 true。【这设定反人类】
命令行参数及 argparse 包
在我们需要控制不同分支代码的执行时,命令行参数最适用了,代码写好后只需在命令行设定不同的参数运行即可。
在命令行参数的解析中,可以用到 argparse 包。
入门 argparse 可以参考教程
给出一个最简单的 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 false
和python3 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
推荐阅读
-
python模块介绍- argparse:命令行选项及参数解析
-
【python3基础】命令行参数及 argparse
-
PHP 命令行参数详解及应用
-
Python解析命令行读取参数--argparse模块使用方法
-
XZ_Python之Python3基础_函数语法、参数及健壮性讲解
-
Vue – 基础学习(2):组件间 通信及参数传递
-
python3 速查参考- python基础 6 -> 函数编程之参数、变量、作用域、递归、匿名函数 lambda
-
Python命令行参数argv和argparse该如何使用
-
python 如何利用argparse解析命令行参数
-
Ajax语法(Ajax基础、运行原理及实现、异步编程、封装、Ajax状态码、onreadystatechange事件、Ajax错误处理、服务器端响应的数据格式、请求参数)