我在我的 C# 应用程序中嵌入了 IronPython。出于某种原因,我在加载程序集时遇到了问题。具体来说,我想要 System.dll,这样我就可以访问 DateTime 等 .NET 类。
如果我尝试这一行:
_runtime.LoadAssembly(_runtime.Host.PlatformAdaptationLayer.LoadAssembly("System"));
Run Code Online (Sandbox Code Playgroud)
我得到:
could not load file or assembly 'System'
Run Code Online (Sandbox Code Playgroud)
如果我明确输入 C:/WINDOWS/Microsoft.NET/.../System.dll 的路径,我会得到:
The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)
Run Code Online (Sandbox Code Playgroud)
然后我尝试在 Python 脚本中使用 clr 进行导入:
import clr
clr.AddReference('System')
from System import DateTime
Run Code Online (Sandbox Code Playgroud)
现在我得到:
Cannot import name DateTime
Run Code Online (Sandbox Code Playgroud)
我哪里错了?为什么DateTime 不在System 中,为什么LoadAssembly 找不到System.dll?我是否需要明确地为 IronPython 设置一些搜索路径?是否找到无效的“系统”?
当我在 IronPython 解释器中测试时,这一切正常。
我正在实现一个自定义 (Iron)Python 控制台。
一般情况下,我需要显示>>>提示,但是当语句不完整时,我需要将提示更改为...并在执行之前收集更多行。
我如何知道用户输入的行是否完整或者我是否需要阅读更多行?
一个简单的方法似乎是检查是否:存在。但我不确定我是否错过了其他:不存在的情况。
我查看了 IronPython 源代码来弄清楚它是如何做到这一点的,但是涉及很多步骤,我的简单复制未能完全工作。
我在C#中有一个相对较深的对象树需要从IronPython初始化.
我是python的新手,我正在努力进行数组的初始化.
举个例子 - 假设我在C#中有这些类
public class Class1
{
public string Foo {get;set;}
}
public class Class2
{
List<Class1> ClassOnes {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我可以在Class2中初始化数组,如下所示:
var class2 = new Class2(
ClassOnes = new List<Class1>()
{
new Class1(Foo="bar")
});
Run Code Online (Sandbox Code Playgroud)
在IronPython中 - 我试过这个:
bar = Class2
bar.ClassOnes = Class1[Class1(Foo="bar")]
Run Code Online (Sandbox Code Playgroud)
但我总是得到这样的信息:
期望的数组[类型],得到Class1
有任何想法吗?
我已经创建了在 C# 中嵌入 IronPython 代码的代码
public ScriptEngine GetEngine() {
if( _engine != null )
return _engine;
_engine = Python.CreateEngine();
var paths = _engine.GetSearchPaths();
paths.Add( _pythonPath );
_engine.SetSearchPaths( paths );
var runtime = _engine.Runtime;
runtime.LoadAssembly( typeof( CharacterCore ).Assembly );
return _engine;
}
public IAbility Movement() {
var engine = GetEngine();
var script = engine.CreateScriptSourceFromFile( Path.Combine( _pythonPath, "movement.py" ) );
var code = script.Compile();
var scope = engine.CreateScope();
code.Execute( scope );
return scope.GetVariable( "result" );
}
Run Code Online (Sandbox Code Playgroud)
在同一解决方案中的单独 Python 项目中使用适当的 Python 代码。代码本身有效,但如果我在 Python …
我有以下代码(只是一个测试):
var engine = Python.CreateEngine();
var runtime = engine.Runtime;
try
{
dynamic test = runtime.UseFile(@"d:\test.py");
test.SetVariable("y", 4);
test.SetVariable("client", UISession.ControllerClient);
test.Simple();
}
catch (Exception ex)
{
var eo = engine.GetService<ExceptionOperations>();
Console.WriteLine(eo.FormatException(ex));
}
Run Code Online (Sandbox Code Playgroud)
但我想从字符串加载脚本.
我有一个方法返回某种类型的IEnumerable.现在我想知道如何用Ironpython迭代IEnumerable?
谢谢
我对使用新的Razor语法有一点经验,但没有使用Iron Python的经验.我想知道两者是否满足相同的需求?微软是否会优先于其他(或将会)?欣赏你的想法,因为我正在学习学习Iron Python的想法,但如果Razor能够满足同样的需求,我可能不会.
我有一个C#类,它实现了2个IEnumerable接口.如何从IronPython访问任一界面?
我的课:
public class MyClass : IEnumerable<TypeA>, IEnumerable<TypeB>
{
IEnumerator<TypeA> IEnumerable<TypeA>.GetEnumerator()
{
return _lstTypeA.GetEnumerator();
}
IEnumerator<TypeB> IEnumerable<TypeB>.GetEnumerator()
{
return _lstTypeB.GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
我在Python中尝试了以下内容,但它运行时没有错误,它不会从IEnumerable接口返回任何元素:
x = MyClass()
xA = clr.Convert(x, IEnumerable[TypeA])
for y in xA: print y
Run Code Online (Sandbox Code Playgroud) 我在Windows 7上启动IronPython 2.7.3并且耗时超过15秒.为什么这么慢?以及如何解决它?这台电脑是三星NP300E5A(赛扬B800,2gb)笔记本电脑.
我是铁蟒蛇的新手。如果有人可以告诉我如何使用iron-python完全删除数据表,我将有义务?