Остановить сервер разработки Django через запрос страницы? - PullRequest
1 голос
/ 06 июня 2010

Я смотрю на написание портативного легкого приложения Python. Как "GUI инструментарий", с которым я больше всего знаком - с большим отрывом! - это HTML / CSS / JS, я думал использовать Django в качестве фреймворка для проекта, используя его встроенный «сервер разработки» (manage.py runserver).

Я уже пару часов пытаюсь проверить концепцию, и единственная реальная проблема, с которой я столкнулся, это отключение сервера после того, как пользователь закончит использовать приложение. В идеале я хотел бы, чтобы на страницах приложения была ссылка, которая выключала бы сервер и закрывала страницу, но ничто из того, что я вижу в документации Django, не предполагает, что это возможно.

Можно ли это сделать? В таком случае, это разумный подход для написания небольшого портативного инструмента с графическим интерфейсом?

Ответы [ 3 ]

2 голосов
/ 06 июня 2010

Один грубый метод подход будет заключаться в том, чтобы позволить процессу убить себя, например:

# somewhere in a views.py

def shutdown(request):
    import os
    os.kill(os.getpid(), 9) 

Примечание: os.kill доступно только в Unix (альтернатива Windows может выглядеть примерно так: http://metazin.wordpress.com/2008/08/09/how-to-kill-a-process-in-windows-using-python/)

1 голос
/ 06 июня 2010

Взгляните на исходный код python manage.py runserver:

http://code.djangoproject.com/browser/django/trunk/django/core/management/commands/runserver.py

Когда вы нажимаете Ctrl+C, все, что он делает, это звонит sys.exit(0), так что вы, вероятно, можете просто сделать то же самое.

Редактировать: На основании вашего комментария кажется, что Django ловит SystemExit, когда вызывает вашу функцию просмотра. Вы пытались позвонить sys.exit в другой теме?

import threading
thread = threading.Thread(target=sys.exit, args=(0,))
thread.start()

Edit: Nevermind, sys.exit из другого потока только завершает этот поток, что плохо документировано в документации по Python. = (

0 голосов
/ 24 февраля 2012

У меня работает на Windows:

def shutdown(request):
    import os
    os._exit(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...