您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使argparse从带有选项而不是前缀的文件中读取参数

如何使argparse从带有选项而不是前缀的文件中读取参数

您可以通过使用argparse.Action打开文件,解析文件内容然后添加参数的自定义方法解决此问题。

例如,这将是一个非常简单的操作:

class LoadFromFile (argparse.Action):
    def __call__ (self, parser, namespace, values, option_string = None):
        with values as f:
            # parse arguments in the file and store them in the target namespace
            parser.parse_args(f.read().split(), namespace)

您可以这样使用:

parser = argparse.ArgumentParser()
# other arguments
parser.add_argument('--file', type=open, action=LoadFromFile)
args = parser.parse_args()

然后,结果中的名称空间args还将包含从文件中加载的任何配置,其中该文件包含与命令行(例如--foo 1 --bar 2)语法相同的参数。

如果您需要更复杂的解析,还可以先分别解析文件内配置,然后有选择地选择应该接管的值。例如,由于按照指定的顺序对参数进行了评估,因此防止文件中的配置覆盖命令行上明确指定的值可能是有意义的。这将允许使用配置文件作为认值:

def __call__ (self, parser, namespace, values, option_string=None):
    with values as f:
        contents = f.read()

    # parse arguments in the file and store them in a blank namespace
    data = parser.parse_args(contents.split(), namespace=None)
    for k, v in vars(data).items():
        # set arguments in the target namespace if they haven’t been set yet
        if getattr(namespace, k, None) is not None:
            setattr(namespace, k, v)

当然,您还可以使文件读取稍微复杂一些,例如首先从JSON读取。

其他 2022/1/1 18:49:48 有424人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶