我正在使用一个 python 类,它argv
用作参数来解析提供给命令行的参数。这个类使用什么样的解析器我不知道,而且我也无法改变这个类。
现在我想创建一个新类,派生自上述类,并添加了额外的参数argparse
。我怎样才能以最简单、可靠和 Pythonic 的方式实现这一点,argparse
同时保持原始类的功能完整并使用“组合”帮助输出?
我正在使用一个 python 类,它argv
用作参数来解析提供给命令行的参数。这个类使用什么样的解析器我不知道,而且我也无法改变这个类。
现在我想创建一个新类,派生自上述类,并添加了额外的参数argparse
。我怎样才能以最简单、可靠和 Pythonic 的方式实现这一点,argparse
同时保持原始类的功能完整并使用“组合”帮助输出?
该parse_known_args
方法应该有助于挑选出额外的论点;然后,您可以sys.argv
用剩余参数字符串的第二个输出替换并传递控制权。
如果您不知道它正在使用什么解析器或对它有任何访问权限,那么组合帮助输出将变得更加困难。我能想到的最好的选择是运行程序--help
或任何一次,将输出保存为字符串,然后将其添加到description
orepilog
中。根据代码的工作方式,您可以使用类似于以下内容的方式自动执行此过程
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
,但它仍然可能看起来有点奇怪;如果不手动编辑字符串,我不知道如何避免这种情况。