gpt4 book ai didi

python - Pylons REPL 在运行的 Web 服务器中重新评估代码

转载 作者:太空狗 更新时间:2023-10-30 01:35:20 28 4
gpt4 key购买 nike

我在一个预先存在的 pylons 项目(okfn 的 ckan)上用 python 编程,但我是一个口齿不清的人,习惯了这种做事方式。

如有不实之处请指正:

在 Pylons 中似乎我应该说

$ paster serve --reload

获得一个会注意到变化的网络服务器。

那时我可以更改一个函数,保存文件,然后转到我的浏览器来测试更改。

如果我想在制作网页的过程中检查一个函数中的变量,那么我会提出“你好”,然后当我加载页面时,我会得到一个基于浏览器的调试器,我可以在其中检查程序.

这一切都非常好并且运行顺畅,我的印象是人们倾向于编写 pylons 代码。

不幸的是,重新加载需要几秒钟,它一直在打断我的思路。

我想做的是从 emacs 运行 web 服务器,(虽然命令行上的 python REPL 几乎一样好),这样我就可以在编辑器中更改一个函数,然后发送新的将代码添加到正在运行的进程而无需重新启动它。 (使用命令行 repl 我想我必须复制并粘贴新内容,但这也是可行的,只是不太方便)

Python 看起来非常动态,并且在很多方面都非常像 lisp,所以原则上我看不出有任何理由说它行不通。

所以我想问题是:

有没有人熟悉 lisp 的做事方式和 Pylons,他们能告诉我如何在 pylons 中用 lisp 方式编程吗?或者出于某种原因这是不可能的还是一个坏主意?

编辑:

我可以在 emacs 中从我的 python 解释器运行网络服务器:

from paste.script.serve import ServeCommand
ServeCommand("serve").run(["development.ini"])

我可以让代码停止并通过插入向我展示它在做什么:

import pdb
pdb.set_trace()

所以现在我需要的是一种让网络服务器在不同线程上运行的方法,以便控制返回到 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 中重新定义一个函数,则更改不会反射(reflect)在网络服务器中。有谁知道为什么吗?

最佳答案

由于 TokenMacGuy 的评论给出的原因,这种工作方式似乎在 python 中是不可能的,即因为重新定义类不会更改该类实例中的代码。

这似乎是一个可怕的耻辱,因为在许多其他方面 python 似乎非常灵活,但它确实解释了为什么没有 python-swank!

关于python - Pylons REPL 在运行的 Web 服务器中重新评估代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424088/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com