奇怪的IronPython问题

时间:2015-02-09 15:36:58

标签: ironpython

我注意到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);

2 个答案:

答案 0 :(得分:0)

没关系,只找到这篇文章:IronPython hosting caching imported module?

声明IronPython确实缓存了导入的模块。

答案 1 :(得分:0)

您可以在执行后关闭引擎。

_engine.Runtime.Shutdown();