在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"),你需要决定是否要默认为TrueFalse

因此,没有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

回到顶部