我想在python argparse中使用文件参数,文件中的行看起来像这样:
--contour_levels=-4 -2 0 2 4
或:
--contour_levels -4 -2 0 2 4
有一种简单的方法吗?我知道我可以使用第一个,然后列出每行一个其他级别,但这看起来很荒谬。
谢谢!
答案 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:]
获取字符串列表,并返回一个新的文件内容。