IronPython在使用后禁用导入

时间:2009-12-05 00:17:57

标签: import ironpython

有没有办法在我使用完后禁用导入?我正在使用IronPython作为脚本引擎,我不希望用户能够导入任何东西。这可以通过使用setfenv:

在LuaInterface中完成
luanet.load_assembly("System.Windows.Forms")
luanet.load_assembly("System.Drawing")

Form=luanet.import_type("System.Windows.Forms.Form")

-- Only allow the use of the form class

local env = { Form = _G.Form }

setfenv(1, env)

或者在解析脚本文件之前将导入函数设置为nil:

luanet.load_assembly = nil
luanet.import_type = nil

这可以在IronPython中使用吗?

2 个答案:

答案 0 :(得分:0)

一种选择是预先检查您正在执行的脚本,并禁止任何包含import语句(或from ... import语句)的脚本。

foreach(line in script) {
    if(line.TrimeStart().StartsWith("import") || line.TrimeStart().StartsWith("from") {
        throw ...;
    }
}

这不是万无一失的(__import__仍然是一个问题),但它将覆盖绝大多数情况。

答案 1 :(得分:0)

您可以为导入功能创建一个钩子,并且无论如何都要处理用户导入。

在你的情况下,你可以为钩子获得的任何导入返回null。

在此解释了如何执行此操作:https://stackoverflow.com/a/4127766/448547