在什么情况下在python argparse中使用action store_false?

问题描述 投票:0回答:2

这个问题是关于非常有用的 argparse Python 库。

我们知道基本用法:

import argparse
parser =  argparse.ArgumentParser()
parser.add_argument("--useOptionA",help="activate the useOptionA option", action="store_true")
args=parser.parse_args()
print(args)    

所以从逻辑上讲,如果我们这样做:

python program.py
Namespace(useOptionA=False)

python program.py --useOptionA
Namespace(useOptionA=True)

有道理吧?

我的问题是,在什么情况下(或如何)我们可以使用

action="store_false"
选项?

我试过了

import argparse
parser =  argparse.ArgumentParser()
parser.add_argument("--noOptionB",help="do not usethe useOptionB option", action="store_false")
args=parser.parse_args()
print(args) 

但后来我明白了

python program.py
Namespace(noOptionB=True)

python program.py --noOptionB
Namespace(noOptionB=False)

这是没有意义的,如果我想要的只是将变量

useOptionB
设置为真或假。 (除非,我必须做
useOptionB = not args.noOptionB
,但感觉有点奇怪,不是吗)

替代方案也没有意义

import argparse
parser =  argparse.ArgumentParser()
parser.add_argument("--useOptionC",help="activate the useOptionC option", action="store_false")
args=parser.parse_args()
print(args)  

所以

python program.py
Namespace(useOptionC=True)

python program.py --useOptionC
Namespace(useOptionC=False)

在这种情况下,默认是使用选项 C,但“使用”的参数实际上会停用它。

我想这是一个语义问题,但是有人可以写一个例子来解释这个选项吗?

python argparse
2个回答
2
投票

可以说

store_false
dest
结合时有意义,例如

...add_option("--quiet", action="store_false", dest=info)

它提供了更具可读性的代码:

if opts.info:
    print("Now doing this")
...
if opts.info:
    print("Now doing that")

(而不是

if not opts.quiet:
...)


-1
投票

使用 store_true 会有意义。

import argparse
parser =  argparse.ArgumentParser()
parser.add_argument("--useOptionC",help="activate the useOptionC option", action="store_true")
args=parser.parse_args()
print(args)  
© www.soinside.com 2019 - 2024. All rights reserved.