奇怪的 IronPython 问题
Strange IronPython issue
我注意到 IronPython 有一个奇怪的问题。这是一个非常简单的脚本,我的应用程序 运行s:-
import globals
x = globals.x * globals.y
文件 "globals.py" 位于 ScriptEngine
的搜索路径中,仅包含一系列 name=value
行(基本上是我们可能需要的 "global constants"脚本),例如:-
x=5
y=10
..etc..
通常,应用程序的脚本每次执行 运行s 时都可以正常执行,但是如果我执行以下操作,我会遇到问题:-
首先,在 globals.py 中添加一个新行(例如 z=15
)。接下来,编辑我的应用程序脚本以使用新变量:-
import globals
x = globals.x * globals.y + globals.z
接下来执行脚本时(假设我没有关闭我的应用程序)然后我收到以下错误消息:-
'module' object has no attribute 'z'
如果我重新启动我的应用程序 然后 执行脚本,它工作正常。我的应用程序使用单例 ScriptEngine,并且只能假设正在缓存某些内容会导致此问题(例如 globals.py 文件的旧版本,不知何故?)。
我现在已经通过在每次执行脚本时创建一个新的 ScriptEngine 实例来解决这个问题,但我很想知道是什么导致了这个问题,以及我是否可以做些什么 "clear down",而不必每次都实例化一个新的 ScriptEngine。
仅供参考,我的应用程序正在执行的脚本未编译。它只是 运行 使用:-
_engine.CreateScriptSourceFromString(
myScript,
SourceCodeKind.Statements);
没关系,刚找到这篇文章:IronPython hosting caching imported module?
指出 IronPython 确实缓存了导入的模块。
执行后可以关闭引擎
_engine.Runtime.Shutdown();
我注意到 IronPython 有一个奇怪的问题。这是一个非常简单的脚本,我的应用程序 运行s:-
import globals
x = globals.x * globals.y
文件 "globals.py" 位于 ScriptEngine
的搜索路径中,仅包含一系列 name=value
行(基本上是我们可能需要的 "global constants"脚本),例如:-
x=5
y=10
..etc..
通常,应用程序的脚本每次执行 运行s 时都可以正常执行,但是如果我执行以下操作,我会遇到问题:-
首先,在 globals.py 中添加一个新行(例如 z=15
)。接下来,编辑我的应用程序脚本以使用新变量:-
import globals
x = globals.x * globals.y + globals.z
接下来执行脚本时(假设我没有关闭我的应用程序)然后我收到以下错误消息:-
'module' object has no attribute 'z'
如果我重新启动我的应用程序 然后 执行脚本,它工作正常。我的应用程序使用单例 ScriptEngine,并且只能假设正在缓存某些内容会导致此问题(例如 globals.py 文件的旧版本,不知何故?)。
我现在已经通过在每次执行脚本时创建一个新的 ScriptEngine 实例来解决这个问题,但我很想知道是什么导致了这个问题,以及我是否可以做些什么 "clear down",而不必每次都实例化一个新的 ScriptEngine。
仅供参考,我的应用程序正在执行的脚本未编译。它只是 运行 使用:-
_engine.CreateScriptSourceFromString(
myScript,
SourceCodeKind.Statements);
没关系,刚找到这篇文章:IronPython hosting caching imported module?
指出 IronPython 确实缓存了导入的模块。
执行后可以关闭引擎
_engine.Runtime.Shutdown();