Tan*_*yan 14 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
Run Code Online (Sandbox Code Playgroud)
现在,当我运行时,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
Run Code Online (Sandbox Code Playgroud)
那么现在,我应该如何使命令参数"不需要"并在没有给出值时采用默认值?
Yar*_*min 31
文档中的一个食谱表明:
对于nargs等于
?或的位置参数,当没有命令行参数时使用*该default值.
所以下面应该做的伎俩(如果提供它将返回值,否则返回默认值):
parser.add_argument('delay', type=int, nargs='?', default=21)
Run Code Online (Sandbox Code Playgroud)
用法:
$ ./manage.py mycommand
21
$ ./manage.py mycommand 4
4
Run Code Online (Sandbox Code Playgroud)
您可以将破折号语法用于可选的关键字参数:
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument("-d", "--delay", type=int)
def handle(self, *args, **options):
delay = options["delay"] if options["delay"] else 21
print(delay)
Run Code Online (Sandbox Code Playgroud)
用:
$ python manage.py mycommand -d 4
4
$ python manage.py mycommand --delay 4
4
$ python manage.py mycommand
21
Run Code Online (Sandbox Code Playgroud)
文档:
简单解释: