简介
过去几天我一直在研究 Twisted,不到一个月前才开始使用 Python。我的第一个倾向是玩我每天都知道和使用的东西,IRC。感谢 ircLogBot.py,我已经建立并运行了一个基本的 IRC 连接示例。
问题
我希望有一些任意代码在收到 IRC 事件 (PRIVMSG/CTCP/JOIN/PART) 时运行,并且出于调试目的我希望能够更改那段代码然后重新加载它而不关闭整个脚本并重新连接到 IRC 服务器。
最后的笔记
它不一定是包含 Twisted 的解决方案,因为我还没有完全理解它。虽然我认为这是一种扭曲的事情,但作为一个事件驱动的框架,可能设计得很好。
最佳答案
Twisted 在 twisted.python.rebuild
中有一些内置功能它提供了更全面的 Python 内置 reload
实现。功能。仍然存在一些限制,但它与 Python 的内置重新加载的主要区别在于它会找到对象的旧实例并将它们的类替换为新版本。 (主要限制是您必须意识到您的实例可能具有与您当前版本的 __init__
不匹配的旧状态,如果您更改了它,这就是 rebuild.Sensitive
。是为了。)
如果你想做一些真正花哨和自动化的东西,你可以设置一个文件系统监视器来检测文件何时更改,并在文件更改时重新加载相关模块。在 Linux 上,您可以使用 Twisted 的 inotify
支持更改通知,在 OS X 上,您可以使用 cfreactor
连同 FSEvents
原料药 via PyObjC . (我不知道哪些文件更改监控方案适用于 win32,但也可能适用。)
关于python - 在不重新启动主脚本的情况下加载/重新加载 Python 中的部分代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7912250/