使用sys.exit()停止django命令

时间:2016-01-14 19:09:50

标签: django

嗨我有django命令的问题我需要停止命令,如果发生某些情况,通常在python脚本中我使用sys.exit()执行此操作因为我不希望脚本仍在执行我用Django尝试这个并且不起作用还有另一种方法来阻止命令运行吗?

健康和美好的事物。

2 个答案:

答案 0 :(得分:4)

来自the docs

from django.core.management.base import BaseCommand, CommandError
from polls.models import Poll

class Command(BaseCommand):
    help = 'Closes the specified poll for voting'

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

    def handle(self, *args, **options):
        for poll_id in options['poll_id']:
            try:
                poll = Poll.objects.get(pk=poll_id)
            except Poll.DoesNotExist:
                raise CommandError('Poll "%s" does not exist' % poll_id)

            poll.opened = False
            poll.save()

            self.stdout.write(self.style.SUCCESS('Successfully closed poll "%s"' % poll_id))

即。你应该提出一个CommandError

虽然sys.exit通常应该也能正常工作(我的意思是,你说这不适合你 - 如果是我,我会很好奇为什么不能解决)

答案 1 :(得分:1)

我很惊讶地看到这些解决方案,因为它们都不起作用。 Sys.exit()刚刚完成当前线程并且引发'CommandError'只会启动异常处理。提升KeyboardInterrupt也没有任何影响。也许这些解决方案曾经使用过早期版本,或者服务器在不同的环境中启动。

我遇到的here解决方案是_thread.interrupt_main()。它整齐地完成当前请求后停止服务器。