我正在使用一個python類,它使用argv
作爲參數來解析給命令行的參數。這個類使用的是什麼類型的解析器我不知道,我也無法改變這個類。如何添加其他參數到python代碼?
現在我想創建一個新的類,派生自所提到的類,並添加了附加參數。我怎樣才能以最簡單,可靠和pythonic的方式實現這一點,保持原始類的功能完好無損,並具有「組合」幫助輸出?
我正在使用一個python類,它使用argv
作爲參數來解析給命令行的參數。這個類使用的是什麼類型的解析器我不知道,我也無法改變這個類。如何添加其他參數到python代碼?
現在我想創建一個新的類,派生自所提到的類,並添加了附加參數。我怎樣才能以最簡單,可靠和pythonic的方式實現這一點,保持原始類的功能完好無損,並具有「組合」幫助輸出?
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
的說法自定義的那一行,但它仍然可能看起來有點奇怪;我不知道如何避免這種情況,而無需手動編輯字符串。
你的評論並沒有「完全」回答我的問題,但你提到了足夠的點點滴滴。因此我會接受答案爲「正確」。 – Alex