2017-04-10 59 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