如何在python代码中添加其他参数?

时间:2013-01-07 10:01:46

标签: inheritance python-2.7 arguments argparse

我使用的是一个python类,它使用argv作为参数来解析赋予命令行的参数。这个类正在使用什么样的解析器我不知道,无论如何我都无法改变这个类。

现在我想创建一个新类,派生自上面提到的类,其中添加了argparse的附加参数。如何使用argparse以最简单,可靠和pythonic的方式实现此目的,同时保持原始类的功能完整并使用“组合”帮助输出?

1 个答案:

答案 0 :(得分:0)

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

如果你不知道它正在使用什么解析器或者对它有任何访问权限,那么组合的帮助输出会更难。我能想到的最佳选择是使用--help或任何时间运行程序,将输出保存为字符串,然后将其添加到descriptionepilog。根据代码的工作方式,您可以使用

的内容自动执行此过程
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的那一行,但它仍然可能看起来有点奇怪;我不知道如何在不手动编辑字符串的情况下避免这种情况。