我注意到IronPython的一个奇怪问题。这是我的应用程序运行的一个非常简单的脚本: -
import globals
x = globals.x * globals.y
文件“globals.py”驻留在ScriptEngine
的搜索路径上,只包含一系列name=value
行(基本上是我们脚本可能需要的“全局常量”),例如: -
x=5
y=10
..etc..
通常,应用程序的脚本每次运行都会正常运行,但如果我执行以下操作,则会遇到问题: -
首先,向globals.py添加一个新行(例如z=15
)。接下来,编辑我的应用程序的脚本以使用新变量: -
import globals
x = globals.x * globals.y + globals.z
当下一步执行脚本时(假设我没有关闭我的应用程序),我收到以下错误消息: -
'module'对象没有属性'z'
如果我重启我的应用程序然后执行脚本,它可以正常工作。我的应用程序使用单例ScriptEngine,并且只能假设某些内容被缓存以导致这种情况(例如旧版本的globals.py文件,不知何故?)。
我现在通过每次执行脚本时创建一个新的ScriptEngine实例来修复此问题,但我很想知道可能导致问题的原因,以及是否有任何我可以“清除”的内容,而不是每次都必须实例化一个新的ScriptEngine。
仅供参考我的应用程序正在执行的脚本未编译。它只是使用: -
运行_engine.CreateScriptSourceFromString(
myScript,
SourceCodeKind.Statements);
答案 0 :(得分:0)
没关系,只找到这篇文章:IronPython hosting caching imported module?
声明IronPython确实缓存了导入的模块。
答案 1 :(得分:0)
您可以在执行后关闭引擎。
_engine.Runtime.Shutdown();