我有一个file.conf文件,可以使用ConfigParser()加载到python中。 conf文件具有通常的格式(也使用opencv):
[decorations]
timestamp_fg= 255,255,255
timestamp_bg= 0,0,0
font_scale = 1.5
conf文件很大。我想要一种自动为ArgumentParser()生成python代码的方法,以便我可以单作者conf文件,生成一些代码,然后删除不需要的代码:
parser = argparse.ArgumentParser()
parser.add_argument("-c","--config", help="full pathname to config file", type=str)
# etc.
我没有找到这样的实用程序,但仍然只在python中使用了几个月。
答案 0 :(得分:1)
虽然我不确定,但我会做两件事之一
创建一个接受ConfigParser
对象的函数并将其转换为Argparse
的等效对象
为其编写一个正则表达式并进行直接转换
仅使用string.format()
可能很好
# make a template for your Argparse options
GENERIC_COMMAND = """\
parser.add_argument(
"--{long_name}", "-{short_name}",
default="{default}",
help="help_text")"""
...
# parse ConfigParser to commands
commands = [
{
"long_name": "argumentA",
},
{
"long_name": "argumentB",
"help_text": "Do Thing B"
},
...
]
commands_to_write_to_file = []
for command in commands:
try:
commands_to_write_to_file.append(
GENERIC_COMMAND.format(**command)) # expand command to args
except Exception as ex:
print("Caught Exception".format(repr(ex)))
# to view your commands, you can write commands to file
# or try your luck with the help command
with open(out.txt, "w") as fh:
fh.write("\n\n".join(commands_to_write_to_file))
这两个都不是很好的解决方案,但是我希望它们可以轻松完成90%的工作,留下良好的日志记录,让您自己找到并转换其余的几个奇数命令。
对输出感到满意后,就可以摆脱转储逻辑,而直接用'em代替argparse参数
for command in commands:
argparse.add_argument(**command)
答案 1 :(得分:0)
我会结帐ConfigArgParse。该库允许
命令行参数,配置文件,硬编码默认值以及某些情况下环境变量的组合