編輯:最新版本的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