Tag: ironpython

IronPython和C# – 脚本访问C#对象

考虑以下代码: ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(null); ScriptRuntime runtime = new ScriptRuntime(setup); ScriptEngine engine = Python.GetEngine(runtime); ScriptScope scope = engine.CreateScope(); scope.SetVariable(“message”, “Hello, world!”); string script = @”print message”; ScriptSource source = scope.Engine.CreateScriptSourceFromString(script, SourceCodeKind.Statements); source.Execute(); 此代码产生以下exception: Microsoft.Scripting.Runtime.UnboundNameException未处理Message =“name’message’未定义” 我错过了什么?

我怎样才能在Ironpython中使用-X:Frames?

Visual Studio 2010 + Ironpython for .net4 我想在ironpython中使用numpy,他们说我必须使用帧支持。 所以,我应该在命令行上使用-X:Frames或-X:FullFrames运行ipy。 但是,我有两个问题:1。我可以在Ironpython Interactive控制台中使用-X:Frames或-X:FullFrames吗? 2.如果我使用C#4加载包含numpy的py,我怎样才能使用extern参数-X:Frames或-X:FullFrames? 非常感谢。

如何在单独的AppDomain中托管IronPython引擎?

我试过了明显的事: var appDomain = AppDomain.CreateDomain(“New Domain”); var engine = IronPython.Hosting.Python.CreateEngine(appDomain); // boom! 但我收到以下错误消息: 成员’Microsoft.Scripting.Hosting.ScriptRuntimeSetup,Microsoft.Scripting,Version = 0.9.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35’的类型未解析。 谷歌搜索这个错误并没有certificate是富有成效的… 编辑#1: 我试图通过将相关的东西复制到新的控制台应用程序来创建一个最小的复制项目: using System; using Microsoft.Scripting; namespace PythonHostSamle { class Program { static void Main(string[] args) { AppDomain sandbox = AppDomain.CreateDomain(“sandbox”); var engine = IronPython.Hosting.Python.CreateEngine(sandbox); var searchPaths = engine.GetSearchPaths(); searchPaths.Add(@”C:\Python25\Lib”); searchPaths.Add(@”C:\RevitPythonShell”); engine.SetSearchPaths(searchPaths); var scope […]

将列表从IronPython传递给C#

我想将IronPython 2.6 for .NET 2.0中的字符串列表传递给C#程序(我使用的是.NET 2.0,因为我正在使用基于2.0构建的DLL运行的api)。 但是我不确定如何从ScriptEngine返回它。 namespace test1 { class Program { static void Main(string[] args) { ScriptEngine engine = Python.CreateEngine(); ScriptSource source = engine.CreateScriptSourceFromFile(“C:\\File\\Path\\To\\my\\script.py”); ScriptScope scope = engine.CreateScope(); ObjectOperations op = engine.Operations; source.Execute(scope); // class object created object classObject = scope.GetVariable(“MyClass”); // get the class object object instance = op.Invoke(classObject); // create the […]

IronPython在C#中的集成:一个特定的问题/问题

我正在通过IronPython为我的C#mapmaking应用程序提供可扩展性机制。 一切正常,但我有一个特定的要求,我无法实现:我希望用户能够指定两件事: 要加载的Python脚本的文件名 包含Python脚本的单行字符串,通常是从该Python文件调用函数(例如getTextLabel(element) ) 这两个设置必须是分开的,但我不知道是否可以使用PythonScript和相关类来完成此操作。 我是Python的新手,或许有另一种方法可以实现这一目标? 出于性能原因,我想避免多次加载和编译Python脚本文件(因为可能有上面提到的几个不同的“函数调用”设置,如果可能的话我想重用文件的CompiledCode实例)。 更新: @digEmAll给出了我的问题的正确答案,所以我接受它作为一个有效的答案。 但如果你关心表现,你也应该看看我自己的答案。

存储为字符串的脚本的IronPython依赖项

我有一个C#应用程序,它将python脚本文件(* .py)存储为字符串。 我用它们加载它们: scriptEngine.CreateScriptSourceFromString(code); 但是现在我有多个脚本文件,它们之间有依赖关系(导入)。 为了处理依赖项,我可以将所有字符串保存回文件夹中的文件并加载我想要执行的脚本: scriptEngine.CreateScriptSourceFromFile(filePath); 但这会使所有脚本文件都可见。 有没有办法以内存方式实现这一点,以便脚本文件不首先保存到磁盘,而是直接从字符串加载? TL; DR:这看起来如何: myutils.py: def SomeMethod(p): print (‘SomeMethod(p=%s)’ % p) script1.py: import myutils; if __name__ == ‘__main__’: myutils.SomeMethod(‘script1’) script2.py: import myutils; if __name__ == ‘__main__’: myutils.SomeMethod(‘script2’) 我的应用程序将脚本存储为字符串。 就像是 Dictionary filePathToContent = new Dictionary(); filePathToContent[“myutils.py”] = “…”; // The script file content. filePathToContent[“script1.py”] = “…”; // The script […]

如何使用Microsoft.Scripting.Hosting?

要将一些IronPython代码嵌入到C#中,我想使用ScriptEngine using IronPython.Hosting; using Microsoft.Scripting.Hosting; 我找到了IronPython的参考资料,但是Scripting.Hosting的必要参考在哪里? 我在VisualStudio 2008中找不到它,目标是.Net 3.5。

脚本参数和嵌入式IronPython

我的C#应用​​程序中有一个嵌入式脚本引擎,它使用IronPython 2.我创建Python运行时并向全局命名空间添加一些类,以便脚本可以将它们作为模块导入。 但是,一个(非常基本的)我无法弄清楚的是如何发送脚本参数。 我意识到我可以创建一个带有参数列表的变量,但必须有一个正确的方法来完成它。 此外,以正确的’Python’方式执行此操作允许我编译脚本并使用名为Sphinx的自动文档构建器。 所以最终目标是能够使用: import sys sys.argv 在我的一个脚本中,让它获得用户指定的参数(通过C#应用程序)。 现在,我使用以下方法调用脚本: // set up iron python runtime engine _engine = Python.CreateEngine(); _runtime = _engine.Runtime; _scope = _engine.CreateScope(); // run script _script = _engine.CreateScriptSourceFromFile(_path); _script.Execute(_scope); 我已经尝试搜索API以添加脚本参数而没有运气。 我也尝试将它们附加到脚本路径(示例中为_path),但没有运气。 我尝试使用CreateScriptSourceFrom File和CreateScriptSourceFromSting(无论如何都是一个很长的镜头……)。 我甚至想做什么?

什么是停止正在运行的线程的安全方法?

我有一个包含执行IronPython脚本的线程。 出于某种原因,我可能需要随时停止此线程,包括脚本执行。 怎么做到这一点? 第一个想法是Thread.Abort() ,但它已知是邪恶的……

在C#中嵌入IronPython

我只是在研究使用IronPython和C#,似乎无法找到任何我需要的优秀文档。 基本上我试图将.py文件中的方法调用到C#程序中。 我有以下打开模块: var ipy = Python.CreateRuntime(); var test = ipy.UseFile(“C:\\Users\\ktrg317\\Desktop\\Test.py”); 但是,我不确定如何访问其中的方法。 我见过的例子使用了动态关键字,但是,在工作中我只使用C#3.0。 谢谢。