2017-04-10 90 views
2

如何從命令行將多個參數傳遞給自定義的django管理命令?帶有自定義管理命令的值的多個參數

def add_arguments(self, parser): 
    parser.add_argument('str_arg1', nargs='+') 
    parser.add_argument('int_arg2', nargs='+', type=int) 

當我運行:

./manage.py my_command str_arg1 value int_arg2 1 --settings=config.settings.local 

我得到options以下值:

options['str_arg1'] = ['str_arg1', 'value', 'int_arg2'] 
options['int_arg2'] = [1] 

試圖傳遞的參數用的解決方案和多種方式搜索的文檔和在線沒有運氣。 Django版本是1.10。

感謝

回答

2

您所定義的參數的方式意味着它們位置參數。沒有明智的方法來擁有消耗未知數量值的多個位置參數。

修改解析器將其指定爲選項,而不是:

parser.add_argument('--str_arg1', nargs='+') 
parser.add_argument('--int_arg2', nargs='+', type=int) 

並修改電話:

./manage.py my_command --str_arg1 value --int_arg2 1 
+1

非常感謝,該訣竅。很簡單。任何想法爲什麼它會把值列入清單?我現在使用'options ['str_arg1'] [0]' – Ovidiu

+1

檢索它們當你使用'nargs ='+''時,argparse將始終將這些值存儲到列表中。 '+'的意思是「這個參數可能有一個或多個值」。如果你知道你只想消費一個值,你可以省略'nargs ='+''。 – wim