【问题标题】:Multiple arguments with values to custom management command具有自定义管理命令值的多个参数
【发布时间】:2017-09-05 23:33:45
【问题描述】:

如何将多个带值的参数从命令行传递到自定义 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。

谢谢

【问题讨论】:

    标签: python django django-management-command


    【解决方案1】:

    您定义参数的方式意味着它们是位置参数。有多个位置参数消耗未知数量的值是没有明智的方法的。

    修改您的解析器以将它们指定为选项:

    parser.add_argument('--str-arg1', nargs='+')
    parser.add_argument('--int-arg2', nargs='+', type=int)
    

    并修改调用:

    ./manage.py my_command --str-arg1 value --int-arg2 1
    

    【讨论】:

    • 非常感谢,成功了。很简单。知道为什么它将值放入列表中吗?我现在正在使用 options['str_arg1'][0] 检索它们
    • 当您使用nargs='+' 时,argparse 将始终将值存储到列表中。 + 表示“此参数可能有一个或多个值”。如果您知道只想使用一个值,则可以省略 nargs='+'
    猜你喜欢
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2011-11-07
    • 2016-03-28
    相关资源
    最近更新 更多