在过去的几天里,我一直在修补Twisted,不到一个月前我就开始使用python了。我的第一个爱好是玩我每天都知道和使用的东西,IRC。由于ircLogBot.py示例,我已经建立并运行了一个基本的IRC连接。在
我想让一些任意代码在收到IRC事件(PRIVMSG/CTCP/JOIN/PART)时运行,为了调试的目的,我希望能够在不关闭整个脚本并重新连接到IRC服务器的情况下对这段代码进行更改,然后重新加载它。在
它不必是一个包含Twisted的解决方案,因为我还没有完全理解它。尽管我认为twisted作为一个事件驱动的框架,很可能设计得很好。在
您可能想看看“livecoding”,它可以处理代码重新加载;它可能适合您的需要。但是请注意,“livecoding”需要代码文件(文件夹)遵循自己的约定,而这些约定并不一定是python式的。在
另一种可能是使用
reload
来运行您自己的系统,就像Raymond建议的那样。如果代码与状态数据分离得很好,那么实现起来可能很容易。在安排一个重复发生的事件(每隔几秒钟)重新加载正在调试的模块。为此,请使用内置的reload()函数。在
您可能希望将其包装在try/except中,以处理在正在调试的模块中引入错误的情况。这将使服务器在出现错误时保持活动:-)
Twisted在^{} 中有一些内置功能,它提供了Python内置^{} 函数的更全面的实现。仍然存在一些限制,但是它与Python的内置重新加载的主要区别在于它将找到对象的旧实例,并用新版本替换它们的类。(主要的限制是,如果您更改了实例的当前版本} 就是为了这个。)
__init__
,那么您必须意识到您的实例可能具有与当前版本不匹配的旧状态,^{如果你想让某些东西变得非常新奇和自动化,你可以设置一个文件系统监视器来检测文件何时更改,并在文件更改时用rebuild重新加载相关的模块。在Linux上,您可以使用Twisted的^{} 支持更改通知,在OS X上,可以使用^{} 和^{} APIvia PyObjC。(我不知道哪种文件更改监视方案在win32上工作,但在那里也有可能。)
相关问题 更多 >
编程相关推荐