私は既存のpylonsプロジェクト(okfnのckan)をPythonでプログラミングしていますが、私は商売をしている人であり、その方法に慣れています。
私が虚偽の陳述をした場合は私を訂正してください:
パイロンでは、私は言うべきだと思われます
$パスターサーブ--reload
変更に気付くWebサーバーを取得します。
その時点で、関数を変更し、ファイルを保存してから、ブラウザーに移動して変更をテストできます。
Webページを作成する過程で関数内の変数を調べたい場合は、raise "hello"を入力し、ページをロードすると、プログラムを調べることができるブラウザーベースのデバッガーを取得します。
これはすべて非常に素晴らしく、水泳で機能します。それが人々がパイロンコードを書く傾向があるという印象を受けます。
残念ながら、リロードには数秒かかり、それは私の思考の流れを壊し続けます。
私がやりたいのは、emacsからWebサーバーを実行することです(ただし、コマンドラインでのpython REPLもほぼ同じです)。これにより、エディターで関数を変更して、新しいコードをに送信できます。再起動せずにプロセスを実行します。(コマンドラインのreplを使用すると、新しいものをコピーして貼り付ける必要があると思いますが、それも実行可能であり、少し便利ではありません)
Pythonは非常に動的で、多くの点でlispによく似ているので、それが機能しない理由は原則としてわかりません。
だから私は質問が次のとおりだと思います:
誰かが物事を行うLispの方法とPylonsに精通していますか?彼らはPylonsでLispの方法をプログラムする方法を教えてもらえますか?それとも、それは不可能ですか、それとも何らかの理由で悪い考えですか?
編集:
次のコマンドを使用して、emacs内のPythonインタープリターからWebサーバーを実行できます。
from paste.script.serve import ServeCommand
ServeCommand("serve").run(["development.ini"])
そして、次のように挿入することで、コードを停止させ、コードが何をしているのかを表示できます。
import pdb
pdb.set_trace()
したがって、必要なのは、Webサーバーを別のスレッドで実行する方法だけです。これにより、制御がREPLに戻り、実行中のプロセスで関数と変数を再定義できます。
def start_server():
from paste.script.serve import ServeCommand
ServeCommand("serve").run(["development.ini"])
server_thread=threading.Thread(target=start_server)
server_thread.start()
REPLで関数を再定義した場合、変更がWebサーバーに反映されないことを除いて、これは機能しているようです。誰かが理由を知っていますか?