【问题标题】:IronPython scripts execution from C# code从 C# 代码执行 IronPython 脚本
【发布时间】:2023-03-12 16:20:01
【问题描述】:

我有一个问题,我有这样的代码

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 对象吗?

【问题讨论】:

    标签: c# dynamic ironpython


    【解决方案1】:

    我想你只需要打电话:

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

    否则,请查看 here 以了解有关重定向的类似问题。

    关于C#中的python类实例化,你的代码好像没问题,如question所示(看第三个答案)

    编辑:

    抱歉,我没有认真阅读您的问题...

    不管怎样,要在 Python 中寻找可用的类,就照你说的做,

    即类似:

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

    【讨论】:

    • 好的,谢谢!我不太了解实例化,当我确切知道类名是什么时它可以正常工作。但是如果客户用一些自定义名称定义了他们自己的自定义类,它实现了一些接口(例如使用一个方法 Do())并且我想实例化这个类并运行这个 Do() 方法,但我不能使用 'scope .GetVariable()',因为我不知道类名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    相关资源
    最近更新 更多