嗨我有django命令的问题我需要停止命令,如果发生某些情况,通常在python脚本中我使用sys.exit()执行此操作因为我不希望脚本仍在执行我用Django尝试这个并且不起作用还有另一种方法来阻止命令运行吗?
健康和美好的事物。
答案 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()。它整齐地完成当前请求后停止服务器。