我想使用argparse来解析写为"-foo True"或"-foo False"的布尔命令行参数.例如:

my_program --my_boolean_flag False

但是,下面的测试代码并不能满足我的要求:

import argparse
parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)
cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse(cmd_line)

可悲的是,parsed_args.my_bool等于True.即使我将cmd_line改为["--my_bool", ""],情况也是如此,这是令人惊讶的,因为bool("")等于False.

我怎样才能让argparse解析"False""F",而它们的小写变量是False

推荐答案

这实际上已经过时了.对于Python 3.7+,Argparse now supports boolean args(搜索BooleanOptionalAction).

实现如下所示:

import argparse

ap = argparse.ArgumentParser()

# List of args
ap.add_argument('--foo', default=True, type=bool, help='Some helpful text that is not bar. Default = True')

# Importable object
args = ap.parse_args()

另外需要注意的一件事是:这将通过argparse.ArgumentTypeError为参数挡路除True和False之外的所有条目.如果您出于任何原因要try 更改此设置,则可以为此创建自定义错误类.

Python相关问答推荐

Python在通过Inbox调用时给出不同的响应

将词典写入Excel

如何使用Selenium访问svg对象内部的元素

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

Python无法在已导入的目录中看到新模块

从DataFrame.apply创建DataFrame

根据网格和相机参数渲染深度

Class_weight参数不影响RandomForestClassifier不平衡数据集中的结果

Pandas 填充条件是另一列

理解Python的二分库:澄清bisect_left的使用

从webhook中的短代码(而不是电话号码)接收Twilio消息

替换字符串中的多个重叠子字符串

Pandas 有条件轮班操作

在Pandas DataFrame操作中用链接替换'方法的更有效方法

发生异常:TclMessage命令名称无效.!listbox"

如何让Flask 中的请求标签发挥作用

用渐近模计算含符号的矩阵乘法

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

如何在Python中使用另一个数据框更改列值(列表)

为什么在FastAPI中创建与数据库的连接时需要使用生成器?