在harcoded配置和命令行之间切换使用argparse
为了便于开发,我在代码中使用硬编码参数配置。在harcoded配置和命令行之间切换使用argparse
import argparse if __name__ == '__main__':
local_conf = {
"debug": True,
"loglevel": 2
}
parser = argparse.ArgumentParser()
parser.add_argument("--from_bash", action="store_true")
parser.add_argument("--debug", action="store_true")
parser.add_argument("--loglevel", default=5)
conf =parser.parse_args()
if not conf.from_bash:
conf.__dict__ = {**conf.__dict__, **local_conf} # merges configurations
....
我发现通过对它们进行评论可以更轻松地打开和关闭选项。
从脚本执行它,我用一个选项告诉程序忽略硬编码的配置:--from_bash这里
python main.py --from_bash --loglevel 3
这是错误容易,如果我忘记了 - from_bash选项,我得到一个错误的配置。
在硬编码配置和命令行之间切换是否有更简洁的方法?
回答:
可以在e.g的local_conf
值指定条件+默认值:
import argparse if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("--debug", action="store_true")
parser.add_argument("--loglevel")
conf = parser.parse_args()
default_level = 2
local_conf = {
"debug": conf.debug, # This will be False on absence of --debug
"loglevel": conf.loglevel if conf.loglevel else default_level
}
print(local_conf)
例如,这将使用2
作为默认级别,除非指定--loglevel
。当使用标志(argparse的action="store_true"
),你需要决定是否要默认为True
或False
因此,没有ARGS运行此,local_conf
会打印:
{“调试”:假,“日志级别':2}
使用--loglevel 5 --debug
{' 调试': true,'loglevel':'5'}
回答:
这里有两种选择。
你把用户的心理负荷增加--from_bash
时,他们希望自己的配置服从。需要一个特殊的标志可能会更有意义,因此硬编码配置只能与标志一起使用。
... parser = argparse.ArgumentParser()
parser.add_argument("--dev", action="store_true", help=argparse.SUPPRESS) # Don't show in help message... user doesn't need to know
...
if conf.dev:
conf.__dict__ = {**conf.__dict__, **local_conf} # merges configurations
...
现在,只有您作为开发人员需要了解有关硬编码配置的任何信息。
对于出的现成的方法,你可以使用从文件中读取配置能力。它需要一个值每行:
# Contents of configurations.txt --debug
--loglevel
2
您与魔法的话实例化您的解析器能够读取配置文件:
parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
您可以提供这种配置前缀@
:
python main.py @configurations.txt
这会在命令行中给出configurations.txt
中所有选项的相同效果。
以上是 在harcoded配置和命令行之间切换使用argparse 的全部内容, 来源链接: utcz.com/qa/265227.html