我使用的是一个python类,它使用argv
作为参数来解析赋予命令行的参数。这个类正在使用什么样的解析器我不知道,无论如何我都无法改变这个类。
现在我想创建一个新类,派生自上面提到的类,其中添加了argparse
的附加参数。如何使用argparse
以最简单,可靠和pythonic的方式实现此目的,同时保持原始类的功能完整并使用“组合”帮助输出?
答案 0 :(得分:0)
parse_known_args
方法应该有助于挑选出额外的参数;然后,您可以用剩余参数字符串的第二个输出替换sys.argv
并传递控制。
如果你不知道它正在使用什么解析器或者对它有任何访问权限,那么组合的帮助输出会更难。我能想到的最佳选择是使用--help
或任何时间运行程序,将输出保存为字符串,然后将其添加到description
或epilog
。根据代码的工作方式,您可以使用
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()
(未经测试的代码,买家要小心。)
这很可能会给你两个初始用法行,第一个列出你的参数,第二个列出内部类的参数。您可以使用usage
参数自定义argparse
的那一行,但它仍然可能看起来有点奇怪;我不知道如何在不手动编辑字符串的情况下避免这种情况。