如何切换布尔 argparse 选项?
How to toggle a boolean argparse option?
我正在尝试将 configparser 和 argparse 结合用于一个脚本,以便将 argparse 定义的各种参数的默认值存储在一个通过 configparser 操作的配置文件中。我 运行 遇到的问题是布尔选项。 argparse 具有这些选项的 store_true
和 store_false
操作,它们会自动创建默认值并指定在给出选项时要更改的内容。但是,由于默认值是从配置文件中读入的,所以我不知道提前使用这些操作的时间是什么。这会建议类似:
import argparse,configparser
config = configparser.ConfigParser()
config['DEFAULT']['test'] = 'False'
config.read('testing.cfg')
parser = argparse.ArgumentParser()
if config.getboolean('DEFAULT','test'):
parser.add_argument('-t',action='store_false', dest='test')
else:
parser.add_argument('-t',action='store_true', dest='test')
args = parser.parse_args()
print(args.test)
但是,我不喜欢在条件语句中包含 parser.addargument
语句的想法(尤其是我拥有的这些选项越多越麻烦)。我更喜欢这样的东西:
parser.add_argument('-t',action='toggle_boolean',dest='test',default=config.getboolean('DEFAULT','test'))
在这种情况下,toggle_boolean
操作会在给出参数时切换布尔值的状态,无论它碰巧是什么。问题是所述操作 (toggle_boolean
) 不存在。我将如何定义这样的操作,或者有更好的方法吗?
store_true
和 store_false
是 store_const
:
的特例
In [213]: parser = argparse.ArgumentParser()
In [214]: foo = True
In [215]: parser.add_argument('-s', action='store_const', default=foo, const=not(foo))
In [216]: parser.add_argument('-n', action='store_const', default=not(foo), const=foo);
In [218]: parser.parse_args([])
Out[218]: Namespace(n=False, s=True)
In [219]: parser.parse_args(['-s','-n'])
Out[219]: Namespace(n=True, s=False)
我正在尝试将 configparser 和 argparse 结合用于一个脚本,以便将 argparse 定义的各种参数的默认值存储在一个通过 configparser 操作的配置文件中。我 运行 遇到的问题是布尔选项。 argparse 具有这些选项的 store_true
和 store_false
操作,它们会自动创建默认值并指定在给出选项时要更改的内容。但是,由于默认值是从配置文件中读入的,所以我不知道提前使用这些操作的时间是什么。这会建议类似:
import argparse,configparser
config = configparser.ConfigParser()
config['DEFAULT']['test'] = 'False'
config.read('testing.cfg')
parser = argparse.ArgumentParser()
if config.getboolean('DEFAULT','test'):
parser.add_argument('-t',action='store_false', dest='test')
else:
parser.add_argument('-t',action='store_true', dest='test')
args = parser.parse_args()
print(args.test)
但是,我不喜欢在条件语句中包含 parser.addargument
语句的想法(尤其是我拥有的这些选项越多越麻烦)。我更喜欢这样的东西:
parser.add_argument('-t',action='toggle_boolean',dest='test',default=config.getboolean('DEFAULT','test'))
在这种情况下,toggle_boolean
操作会在给出参数时切换布尔值的状态,无论它碰巧是什么。问题是所述操作 (toggle_boolean
) 不存在。我将如何定义这样的操作,或者有更好的方法吗?
store_true
和 store_false
是 store_const
:
In [213]: parser = argparse.ArgumentParser()
In [214]: foo = True
In [215]: parser.add_argument('-s', action='store_const', default=foo, const=not(foo))
In [216]: parser.add_argument('-n', action='store_const', default=not(foo), const=foo);
In [218]: parser.parse_args([])
Out[218]: Namespace(n=False, s=True)
In [219]: parser.parse_args(['-s','-n'])
Out[219]: Namespace(n=True, s=False)