我正在处理一个(Python 3.x)脚本(由其他人编写),其中输入和输出当前使用标记的可选参数指定,如下所示:
parser.add_argument('-i', '--input', nargs='?', type = argparse.FileType('r'),
default=sys.stdin, dest='inputfile')
parser.add_argument('-o', '--output-file', nargs='?', type=argparse.FileType('w'),
default=sys.stdout, dest='outputfile')
我想升级此脚本,以便可以将输入和输出文件指定为位置参数,同时保留现有的标志参数以实现向后兼容性。我还想智能地处理可能因将标记的参数与位置参数混合而产生的潜在冲突(即,如果只有其中之一)-i
or -o
给出后,单个位置参数会自动传递给另一个位置参数,并且两个位置参数会引发冗余错误,而如果两者都-i
and -o
给定,那么任何位置参数都会引发冗余错误)。
注意:当前编写的脚本不接受任何位置参数,尽管它接受其他标志,除了与输入和输出文件相关的参数之外,有些带有参数,有些不带参数。
这可以用 argparse 实现吗(如果可以的话,如何实现)还是我必须使用其他东西重写参数解析(如果可以的话,你有什么建议)?
坚持FileType
会很尴尬。那type
打开或创建文件。因此,当您只需要 2 个文件时,您可能会打开 4 个文件。但是,如果其中一个文件是stdin
or out
你不想关闭它。你无法处理positional
可以读取或写入,具体取决于给出的其他参数。
您可以尝试定义 4 个默认字符串参数、2 个标记参数和 2 个nargs='?'
位置性的。给他们不一样的dest
。然后你可以将你的智慧应用到 4 个可能的值上。默认默认None
应该足够清楚地表明未提供值。一旦决定了这两个文件名,就可以打开并使用它们。较新的 Python 建议使用with
上下文,尽管当文件已经打开时这可能会很尴尬(例如sys.stdin
).
我认为你不应该尝试在内部实现该逻辑argparse
。解析完之后再做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)