可以使用nargs=4
與'append'
動作:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--group', nargs=4, action='append')
print parser.parse_args()
它會被稱爲:
$ python ~/sandbox/test.py --group 1 2 3 4 --group 1 2 3 4
Namespace(group=[['1', '2', '3', '4'], ['1', '2', '3', '4']])
從這裏,你可以解析鍵值對,如果你想。
另一種選擇是使用自定義動作做解析 - 這裏有一個簡單的一個,其接受--group key:value key2:value2 ... --group ...
import argparse
class DictAction(argparse.Action):
def __init__(self, *args, **kwargs):
super(DictAction, self).__init__(*args, **kwargs)
self.nargs = '*'
def __call__(self, parser, namespace, values, option_string=None):
# The default value is often set to `None` rather than an empty list.
current_arg_vals = getattr(namespace, self.dest, []) or []
setattr(namespace, self.dest, current_arg_vals)
arg_vals = getattr(namespace, self.dest)
arg_vals.append(dict(v.split(':') for v in values))
parser = argparse.ArgumentParser()
parser.add_argument('--group', action=DictAction)
print parser.parse_args()
這有沒有檢查形式的參數(這樣用戶可以胡來TypeError
如果key:value
未正確格式化),並且如果您想將其限制爲指定的鍵,則需要將其構建爲...但這些細節應該足夠容易添加。您也可以要求他們使用self.nargs = 4
在DictAction.__init__
中提供4個值。
我喜歡這個,我沒有意識到action = append可以像那樣工作。我仍然認爲鍵值部分會有點難看,但命令行輸入很難開始。 –
@IanFiddes - 我已經添加了一個key:value解析示例。 – mgilson