IronPython отключить импорт после использования - PullRequest
0 голосов
/ 05 декабря 2009

Есть ли способ отключить использование импорта после того, как я его закончу? Я использую IronPython в качестве скриптового движка и не хочу, чтобы пользователи могли что-либо импортировать. Это можно сделать в LuaInterface с помощью setfenv:

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 голосов
/ 14 сентября 2012

Вы можете создать функцию импорта и иметь дело с пользовательским импортом в любое время.

В вашем случае вы можете просто вернуть null для любого импорта, который получает ваш хук.

Здесь объяснили, как это сделать: https://stackoverflow.com/a/4127766/448547

0 голосов
/ 06 декабря 2009

Один из вариантов - предварительно проверить выполняемые вами сценарии и запретить любые из них, имеющие import операторы (или from ... import операторы).

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

Он не защищен от ошибок (__import__ по-прежнему проблема), но он охватит подавляющее большинство случаев.

...