使用 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 是添加了您的文件内容的新列表。
我想在 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 是添加了您的文件内容的新列表。