【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 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
Parsing boolean values with argparse - Stack Overflow
最新文章
- 【.net 深呼吸】细说CodeDom(5):类型成员
- DSL 或者说是抽象 或者说是沉淀 ,我看到的不错的一篇文章
- extentreports报告插件之extentX之服务搭建(三)
- 设置mysql utf8
- 最有效地优化 Microsoft SQL Server 的性能
- oracle odbc配置
- HDU2594 Simpsons’ Hidden Talents 字符串哈希
- VS 创建 使用C++ 静态类库(Dll)
- Mysql两种存储引擎的优缺点
- Python之美[从菜鸟到高手]--urlparse源码分析
- ExtJS4 便捷三层开发模式
- thinkphp使用foreach遍历的方法
- python opencv SIFT,获取特征点的坐标位置
- VMware12创建新的虚拟机及设置硬件环境
- Java 多线程初级汇总
- 【代码审计】EasySNS_V1.6 前台XSS跨站脚本漏洞分析
- Ajax Control Toolkit 34个服务器端控件的使用
- HTML 页面源代码布局介绍
- Asp.Net webconfig中使用configSections的用法
- .net ASPxGridView 使用手记
热门文章
- LINUX系统学习以及初学者系统下载
- MangoDB的下载和安装
- HTML学习之轮播图
- 事件--JavaScript
- yum install php-gd 安装php gd库报错Error: php56w-common conflicts with php-common-5.3.3-48.el6_8.x86_64 大
- malformed header from script. Bad header的解决方法
- springboot之本地缓存(guava与caffeine)
- Timed out after 30000 ms while waiting to connect
- Java基础学习(八) - 多线程
- Spring中@Import的各种用法以及ImportAware接口