Выполнение скриптов IronPython из кода C # - PullRequest
2 голосов
/ 29 сентября 2010

У меня один вопрос, у меня такой код

this._engine = Python.CreateEngine();
ScriptSource source = this._engine.CreateScriptSourceFromString(script.SourceCode);
ScriptScope scope = this._engine.CreateScope();
ObjectOperations operations = this._engine.Operations;
source.Execute(scope);

И я пытаюсь выполнить код IronPython из учебника:

from System.Collections import BitArray
ba = BitArray(5)
ba.Set(0, True) # call the Set method
print ba[0]

Так что он выполняется правильно, но я не могу понять, если у меня есть print ba[0], почему он не выводит это значение на консоль? Кстати, не могли бы вы посоветовать несколько хороших статей об использовании IronPython для сценариев приложений?

И еще один вопрос: есть ли у меня какой-нибудь класс Python, и я не знаю имя этого класса, потому что клиент может определить его вручную, возможно ли создать экземпляр этого класса? Например

class SomeClass(object):
    def some(self, a, b):
        return <something>

Теперь я пытаюсь использовать этот код

dynamic SomeClass = scope.GetVariable("SomeClass");
dynamic something = SomeClass();
something.some(x,y);

Должен ли я перебирать ScriptScope.GetItems() коллекцию и искать PythonType объекты?

1 Ответ

1 голос
/ 29 сентября 2010

Я думаю, вам просто нужно позвонить:

this._engine.Runtime.IO.RedirectToConsole();

В противном случае посмотрите здесь аналогичный вопрос о перенаправлении.

Что касается создания экземпляров классов Python в C #, ваш код выглядит нормально, как показано в этом вопросе (см. Третий ответ)

EDIT:

Извините, я не прочитал ваш вопрос с достаточным вниманием ...

В любом случае, чтобы найти доступные классы в Python, просто сделайте, как вы сказали,

т.е. что-то вроде:

var availDynClasses = items.Where(x => x.Value is IronPython.Runtime.Types.PythonType);
...