2013-01-07 65 views
0

我正在使用一個python類,它使用argv作爲參數來解析給命令行的參數。這個類使用的是什麼類型的解析器我不知道,我也無法改變這個類。如何添加其他參數到python代碼?

現在我想創建一個新的類,派生自所提到的類,並添加了附加參數​​。我怎樣才能以最簡單,可靠和pythonic的方式實現這一點,保持原始類的功能完好無損,並具有「組合」幫助輸出?

回答

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的說法自定義​​的那一行,但它仍然可能看起來有點奇怪;我不知道如何避免這種情況,而無需手動編輯字符串。

+0

你的評論並沒有「完全」回答我的問題,但你提到了足夠的點點滴滴。因此我會接受答案爲「正確」。 – Alex

相關問題