17

私はDjangoが初めてです。私は単純な間違いを犯していると思います。

Pydev で開発サーバーを起動しました。

プロジェクトの RClick >> Django >> カスタム コマンド >> runserver

サーバーが起動し、すべてが素晴らしかった. しかし今、私はそれを止めようとしていますが、方法がわかりません。PyDev コンソールでプロセスを停止し、Eclipse を閉じましたが、Web ページはまだhttp://127.0.0.1:8000から提供されています。

コマンドラインから通常どおりサーバーを起動して終了しました。

python manage.py runserver

しかし、サーバーはまだ稼働しています。ここで何が間違っていますか?

4

7 に答える 7

14

デフォルトでは、runserver コマンドは自動再ロード モードで実行され、別のプロセスで実行されます。これは、PyDev が停止方法を認識せず、コンソール ウィンドウに出力を表示しないことを意味します。

代わりにコマンドを実行するrunserver --noreloadと、自動リローダーが無効になります。その後、コンソール出力を確認し、サーバーを正常に停止できます。ただし、これは、サーバーを手動で再起動するまで、Python ファイルへの変更が有効にならないことを意味します。

于 2010-04-30T18:25:43.293 に答える
5

プロジェクトを実行します 1. プロジェクト (サブフォルダーではない) を右クリックします 2. Run As > Pydev:Django

終了 1. コンソール ウィンドウで [終了] をクリックします。

サーバーがダウンしています

于 2013-04-06T12:32:43.090 に答える
4

通常はコンソールから実行します。PyDev から実行すると不必要な混乱が生じ、PyDev の GUI 対話型デバッグを使用するまで何のメリットもありません。

于 2010-04-30T17:52:50.733 に答える
3

編集: 最新の PyDev バージョン (PyDev 3.4.1 以降) では、回避策は必要ありません:

つまり、PyDev はプロセスの強制終了操作でサブプロセスを適切に強制終了し、定期的なリロードをオンにしてデバッグする場合でも、PyDev はデバッガーを子プロセスにアタッチします。


古い回答 (3.4.1 より古い PyDev バージョンの場合):

残念ながら、PyDev は単純に親プロセスを強制終了する (つまり、タスク マネージャーで ctrl+C の代わりに親プロセスを強制終了するかのように) ため、これは予想どおりです。

解決策は、Django自体を編集して、子プロセスが親プロセスをポーリングして、それがまだ生きていることを認識し、そうでない場合は終了するようにすることです...参照:親が終了した後に子プロセスを停止させる方法? 参考までに。

ざっと見てみると、django/utils/autoreload.py とそれが起動する方法に関連しているように見えます。そのため、親が生きているかどうかを確認し続けるスレッドを開始する必要があり、そうでない場合はそれを強制終了します。子プロセス -- Django 自体のバグとして報告しました: https://code.djangoproject.com/ticket/16982

注: PyDev の回避策として、PyDev から実行している間に Django に (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
于 2011-10-04T13:06:39.440 に答える
2

解決策: 一部のプロジェクト ファイルでインタープリター エラーを作成します。これにより、サーバーがクラッシュします。その後、サーバーは通常どおり再起動できます。

于 2010-04-30T18:04:46.190 に答える
1

CMD を使用して Windows で操作する場合: サーバーをCTRL+で終了しますBREAK

python manage.py runserver localhost:8000
于 2012-04-22T07:22:08.173 に答える