python - 如何使 Django 自定义管理命令参数不需要?

标签 python django command

我正尝试在 django 中编写自定义管理命令,如下所示-

class Command(BaseCommand):

    def add_arguments(self, parser):
        parser.add_argument('delay', type=int)

    def handle(self, *args, **options):
        delay = options.get('delay', None)
        print delay

现在,当我运行 python manage.py mycommand 12 时,它会在控制台上打印 12。这很好。

现在如果我尝试运行 python manage.py mycommand 然后我想要那个,命令默认在控制台上打印 21。但它给了我这样的东西-

usage: manage.py mycommand [-h] [--version]
                           [-v {0,1,2,3}]
                           [--settings SETTINGS]
                           [--pythonpath PYTHONPATH]
                           [--traceback]
                           [--no-color]
                           delay

那么现在,我应该如何使命令参数“不需要”并在未给出值时采用默认值?

最佳答案

来自 documentation 的食谱之一建议:

For positional arguments with nargs equal to ? or *, the default value is used when no command-line argument was present.

所以下面应该可以解决问题(如果提供则返回值,否则返回默认值):

parser.add_argument('delay', type=int, nargs='?', default=21)

用法:

$ ./manage.py mycommand
21
$ ./manage.py mycommand 4
4

关于python - 如何使 Django 自定义管理命令参数不需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35635128/

相关文章:

命令解析 UNIX shell C

rust - 有条件地将命令的标准输出转换为字符串的时间不够长

python - 在 Celery - Python 中的进程(工作人员)之间共享数据的最佳解决方案是什么?

python - 使用日期在 uwsgi ini 文件中创建日志文件时出错

python - 关于如何唯一标识计算机的想法?

python - 如何更改 Python 中指数的幂?

python - 如何使用 django rest 框架从 GET 请求的查询参数中过滤多个 id?

python - 仅使用 Django 的 DB 部分

python - Django,匹配的查询不存在

安卓语音指令自定义