2013-05-03 52 views
0

我試圖用argparse,python來獲得像--set=X=Y這樣的參數。第一種方法是:python argparse幫助信息的選項值語法

parser.add_argument('--set', dest='d', metavar='book=from:to', action='append', type=str, required=True, help='...') 

我不得不拆分結果(X=Y)我自己,不過沒關係。 我的問題關於argparse生成的幫助消息的語法(--help)。它使用的可能更常見的語法--set X=Y什麼結果:

--set book=from:to ... 

有沒有我這樣的幫助看起來像改變這種行爲方式:

--set=book=from:to ... 

回答

0

不,不是沒有創建自己的自定義argparse.HelpFormatter()類的子類。

這將需要替換該類的內部私有方法。目前的實施方案使用這種方法:

def _format_action_invocation(self, action): 
    if not action.option_strings: 
     metavar, = self._metavar_formatter(action, action.dest)(1) 
     return metavar 

    else: 
     parts = [] 

     # if the Optional doesn't take a value, format is: 
     # -s, --long 
     if action.nargs == 0: 
      parts.extend(action.option_strings) 

     # if the Optional takes a value, format is: 
     # -s ARGS, --long ARGS 
     else: 
      default = action.dest.upper() 
      args_string = self._format_args(action, default) 
      for option_string in action.option_strings: 
       parts.append('%s %s' % (option_string, args_string)) 

     return ', '.join(parts) 

請注意parts.append('%s %s' % (option_string, args_string));您必須提供您自己的以上方法的版本,並將空格替換爲=等號。

這樣做的問題是​​庫的未來版本完全可以使用不同的方法名稱,從而打破了您的自定義類。