我正在尝试使用我的argparse的输出(简单的argparse,只有4个位置参数,每个函数的一次踢,取决于设置为True的变量)
Namespace(battery=False, cache=True, health=False, hotspare=False)
目前我正试图弄清楚如何最好地让python查看其中一个变量何时设置为True;不必像我现在那样进行硬编码:
if args.battery is True:
do_something()
elif args.cache is True:
do_something_else()
etc ...
我宁愿只使用一个命令来检查命名空间中是否存在变量,以及它是否设置为True;但我不能为我的生活找到如何以有效的方式做到这一点。
答案 0 :(得分:1)
如果解决了我的列表理解问题(使用提示后使用vars()):
l = [ k for (k,v) in args.items() if v ]
l是dict中键的列表,其值为'True'
答案 1 :(得分:0)
Use vars()
to convert your namespace to a dictionary,然后使用 dict.get('your key')
,如果它存在,它将返回您的对象,如果不存在,则使用 None
。
my_args.py
import argparse
_parser = argparse.ArgumentParser("A description of your program")
_parser.add_argument("--some-arg", help="foo", action="store_true")
_parser.add_argument("--another-one", type=str)
your_args_dict = vars(_parser.parse_args())
print(your_args_dict.get('some_arg'))
print(your_args_dict.get('another_one'))
print(your_args_dict.get('foo_bar'))
$ python3 my_args.py --some-arg --another-one test
True
test
None