使用带有多个参数的fromfile_prefix_chars(nargs =" *")

时间:2015-03-17 23:49:08

标签: python argparse

我想在python argparse中使用文件参数,文件中的行看起来像这样:

--contour_levels=-4 -2 0 2 4

或:

--contour_levels -4 -2 0 2 4

有一种简单的方法吗?我知道我可以使用第一个,然后列出每行一个其他级别,但这看起来很荒谬。

谢谢!

1 个答案:

答案 0 :(得分:2)

来自文档:

https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.convert_arg_line_to_args

def convert_arg_line_to_args(self, arg_line):
    for arg in arg_line.split():
        if not arg.strip():
            continue
        yield arg

此函数替换解析器用于从文件中读取行的函数。您可以继承ArgumentParser并添加此功能。或者你可以通过用这个函数替换解析器的绑定方法来“kludge”它(没有self - 请参阅注释)。

parser = argparse.ArgumentParser(...)
parser.convert_arg_line_to_args = convert_arg_line_to_args

我们的想法是从你的文件中取一行,然后逐个返回(作为生成器)字符串。如果这不起作用,那就不难调整。

P.S。默认版本是每行返回一个字符串

def convert_arg_line_to_args(self, arg_line):
    return [arg_line]

如果您对如何使用它有更多疑问,请查看ArgumentParser._read_args_from_files的代码。这个函数从sys.argv[1:]获取字符串列表,并返回一个新的文件内容。