2010-06-05 97 views
1

我正在着手编写一个轻便的轻便Python应用程序。作为我最熟悉的“GUI工具包” - 大幅度提高! - 是HTML/CSS/JS,我认为使用Django作为项目的框架,使用其内置的“开发服务器”(manage.py runserver)。通过页面请求暂停Django的开发服务器?

我一直在打理一个概念验证几个小时,目前唯一真正遇到的问题是关闭服务器,一旦用户使用完应用程序。理想情况下,我希望在那里关闭应用程序页面上的链接,关闭服务器并关闭页面,但我在Django文档中没有看到这一点,这表明这是可能的。

可以这样做吗?对于这个问题,这是编写小型的便携式GUI工具的合理方法吗?

回答

2

一个蛮力的方法是让程序杀死自己,如:

# somewhere in a views.py 

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

注:os.kill仅适用于Unix(窗口选择可能是这样的:http://metazin.wordpress.com/2008/08/09/how-to-kill-a-process-in-windows-using-python/

+0

不幸的是,我需要支持Windows用户,以及:-) – 2010-06-05 23:51:54

+0

http://metazin.wordpress.com/2008/08/。 09/how-to-kill-a-process-in-windows-using-python/ – miku 2010-06-05 23:53:57

+0

嘿,那可能工作。我会留下这个问题,看看我是否能够采用一种更加微妙的,方便使用Django的方法,而不是“将它拍摄在脸上”,但它似乎确实完成了工作。 ;-) – 2010-06-06 00:14:50

1

看看源代码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() 

编辑:没关系,从另一个线程sys.exit只是终止线程,这是没有得到很好的Python文档记录。 =(

+0

这是我的第一个想法,但Django捕获'SystemExit'异常并将其作为页面返回! :-D – 2010-06-06 01:31:56

+0

@Ben Blank:查看我的编辑。 – FogleBird 2010-06-06 02:21:00

0

这是在Windows上我的作品:

def shutdown(request): 
    import os 
    os._exit(0) 
相关问题