使用 fromfile_prefix_chars 和多个参数 (nargs="*")

using fromfile_prefix_chars with multiple arguments (nargs="*")

我想在 python argparse 中使用文件参数,文件中的行如下所示:

--contour_levels=-4 -2 0 2 4

或:

--contour_levels -4 -2 0 2 4

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

谢谢!

来自文档:

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

想法是从您的文件中取出一行,然后 return(作为生成器)一个接一个地串起来。如果这不能正常工作,调整起来应该不难。

p.s。默认版本 return 每行一个字符串是

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

如果您对代码的使用有更多疑问,请查看 ArgumentParser._read_args_from_files 的代码。该函数从 sys.argv[1:] 中获取字符串列表,并且 return 是添加了您的文件内容的新列表。