在Python中加载/重新加载部分代码,而无需重新启动主脚本

2024-09-26 18:16:23 发布

您现在位置:Python中文网/ 问答频道 /正文

简介

在过去的几天里,我一直在修补Twisted,不到一个月前我就开始使用python了。我的第一个爱好是玩我每天都知道和使用的东西,IRC。由于ircLogBot.py示例,我已经建立并运行了一个基本的IRC连接。在

问题

我想让一些任意代码在收到IRC事件(PRIVMSG/CTCP/JOIN/PART)时运行,为了调试的目的,我希望能够在不关闭整个脚本并重新连接到IRC服务器的情况下对这段代码进行更改,然后重新加载它。在

最后说明

它不必是一个包含Twisted的解决方案,因为我还没有完全理解它。尽管我认为twisted作为一个事件驱动的框架,很可能设计得很好。在


Tags: 代码py目的服务器脚本示例irc事件
3条回答

您可能想看看“livecoding”,它可以处理代码重新加载;它可能适合您的需要。但是请注意,“livecoding”需要代码文件(文件夹)遵循自己的约定,而这些约定并不一定是python式的。在

另一种可能是使用reload来运行您自己的系统,就像Raymond建议的那样。如果代码与状态数据分离得很好,那么实现起来可能很容易。在

安排一个重复发生的事件(每隔几秒钟)重新加载正在调试的模块。为此,请使用内置的reload()函数。在

您可能希望将其包装在try/except中,以处理在正在调试的模块中引入错误的情况。这将使服务器在出现错误时保持活动:-)

Twisted在^{}中有一些内置功能,它提供了Python内置^{}函数的更全面的实现。仍然存在一些限制,但是它与Python的内置重新加载的主要区别在于它将找到对象的旧实例,并用新版本替换它们的类。(主要的限制是,如果您更改了实例的当前版本__init__,那么您必须意识到您的实例可能具有与当前版本不匹配的旧状态,^{}就是为了这个。)

如果你想让某些东西变得非常新奇和自动化,你可以设置一个文件系统监视器来检测文件何时更改,并在文件更改时用rebuild重新加载相关的模块。在Linux上,您可以使用Twisted的^{}支持更改通知,在OS X上,可以使用^{}^{}APIvia PyObjC。(我不知道哪种文件更改监视方案在win32上工作,但在那里也有可能。)

相关问题 更多 >

    热门问题