0

我正在使用一个 python 类,它argv用作参数来解析提供给命令行的参数。这个类使用什么样的解析器我不知道,而且我也无法改变这个类。

现在我想创建一个新类,派生自上述类,并添加了额外的参数argparse。我怎样才能以最简单、可靠和 Pythonic 的方式实现这一点,argparse同时保持原始类的功能完整并使用“组合”帮助输出?

4

1 回答 1

0

parse_known_args方法应该有助于挑选出额外的论点;然后,您可以sys.argv用剩余参数字符串的第二个输出替换并传递控制权。

如果您不知道它正在使用什么解析器或对它有任何访问权限,那么组合帮助输出将变得更加困难。我能想到的最好的选择是运行程序--help或任何一次,将输出保存为字符串,然后将其添加到descriptionorepilog中。根据代码的工作方式,您可以使用类似于以下内容的方式自动执行此过程

import argparse
import sys
from StringIO import StringIO

old_stderr = sys.stderr
sys.stderr = cap = StringIO()
old_argv = sys.argv
sys.argv = ['--help']
TheClass().parse_args()
sys.stderr = old_stderr
sys.argv = old_argv

parser = argparse.ArgumentParser(description=cap.read())
parser.add_argument('--foo', type=float)

my_args, remainder = parser.parse_known_args()
sys.argv = remainder

TheClass(foo=my_args.foo).parse_args()

(未经测试的代码,买家要小心。)

这很可能会给您两个初始使用行,第一个列出您的参数,第二个列出内部类的参数。您可以argparse使用参数自定义 ' 行usage,但它仍然可能看起来有点奇怪;如果不手动编辑字符串,我不知道如何避免这种情况。

于 2013-01-07T10:17:59.657 回答