标题很模糊,但我不知道如何简洁地表达我的问题。
我想在我的脚本中添加一个标志,该标志将接受布尔值,或者如果未提供布尔值,则默认为 True。该部分很简单,但如果用户未提供该标志(例如“无”),我也希望它保存一个单独的值。本质上持有三种不同的价值观。
import argparse
parser = argparse.ArgumentParser()
######
## prefered method
######
def t_or_f(arg):
arg_str = str(arg)
print(f"evaluating {arg_str}")
if arg_str == "None":
return True
if arg_str.lower() == "true":
return True
if arg_str.lower() == "false":
return False
parser.add_argument(
"--follow-lib",
type=t_or_f,
nargs='?',
)
args, leftover = parser.parse_known_args()
print(args.follow_lib)
这段代码接近我想要实现的目标,但是“python scipt.py --follow-lib”给了我 None ,我希望它是 True 。当没有给标志赋予值时,它不会运行 t_or_f() 函数。
我知道实现这一点的Python方法是使用两个标志,例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"--follow-lib",
action='store_true',
default=None
)
parser.add_argument(
'--no-follow-lib',
action='store_false',
dest='follow_lib'
)
args, leftover = parser.parse_known_args()
print(args.follow_lib)
上面的代码实现了我在脚本中想要的内容,但如果可以避免的话,我不想使用两个标志。有没有一种方法可以只用一个标志来获得相同的结果?
最终我想要以下行为:
python script.py
-> 无
python script.py --follow-lib
-> 正确
python script.py --follow-lib=True
-> 正确
python script.py --follow-lib=False
-> 错误
谢谢
如果不传递任何参数,该函数将永远不会被调用。
不确定这样的东西是否是您正在寻找的
import argparse
parser = argparse.ArgumentParser()
######
## prefered method
######
parser.add_argument(
"--follow-lib",
default=True,
nargs='?',
)
args = parser.parse_args()
arg_str = str(args.follow_lib)
# If true or no argument provided enabled the flag and run some function
if arg_str.lower() == "true" or args.follow_lib is None:
print("Flag Enabled")
# if flag is disable do nothing i guess
if arg_str.lower() == "false":
print("Flag disabled")
args, leftover = parser.parse_known_args()
print(args.follow_lib)