编辑:最新版本的PyDev(因为PyDev的3.4.1)不再需要任何解决方法:
即:PyDev的将正确杀一杀工艺操作子流程和定期重装甚至上调试时,会的PyDev重视调试器到子进程。
老答案(对于PyDev的版本早于3.4.1):
不幸的是,这是意料之中的,因为PyDev的只会杀死父进程(即:好像不是CTRL + C,你杀任务管理器中的父进程)。
该解决方案将编辑Django本身,以便子进程轮询父进程以知道它仍然活着,如果不是,则退出...请参阅:How to make child process die after parent exits?以供参考。
快速查看后,它似乎与django/utils/autoreload有关。py和它启动事物的方式 - 因此,需要启动一个线程,以便看到父代是否还活着,如果它不是它会终止子进程 - 我已经报告说,作为Django中的一个错误本身:https://code.djangoproject.com/ticket/16982
注:为PyDev的一种变通方法,可以使的Django分配一个新的控制台(出的PyDev的),同时还从PyDev的(运行,所以,直到一个合适的解决方案可从Django的,下面的补丁可以用于使Django自动重新分配一个新的控制台 - 在那里你可以正确使用Ctrl + C)。
Index: django/utils/autoreload.py
===================================================================
--- django/utils/autoreload.py (revision 16923)
+++ django/utils/autoreload.py (working copy)
@@ -98,11 +98,14 @@
def restart_with_reloader():
while True:
args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions] + sys.argv
- if sys.platform == "win32":
- args = ['"%s"' % arg for arg in args]
new_environ = os.environ.copy()
new_environ["RUN_MAIN"] = 'true'
- exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)
+
+ import subprocess
+ popen = subprocess.Popen(args, env=new_environ, creationflags=subprocess.CREATE_NEW_CONSOLE)
+ exit_code = popen.wait()
if exit_code != 3:
return exit_code
我不知道你是否可以称之为优雅的解决方案。这很简单,而且很有效。 – Udi 2013-11-11 14:07:32