我想花一些时间来了解更多关于在DLR之上构建的动态语言的知识,我不确定哪种语言会更好学习.
时间有限,我真的只有时间去学习其中一个.
从长远来看,对两者中的哪一个(Iron Ruby或Iron Python)更有用的任何意见?
.net ironpython ironruby dynamic-language-runtime dynamic-languages
我是一名C#.NET程序员,正在学习Python.我已经下载了IronPython,并且知道它可以调用.NET库.
我想知道是否有办法反过来,即在我的C#代码中调用一些现有的"经典"Python库,也许使用.NET Interop.
我希望能够访问诸如pygame之类的库中的函数.
我想试试IronPython和Mono.具体做sysadmin任务.这通常意味着运行OS命令.在CPython中,我使用子进程模块执行此类任务.但是在IronPython(v2.0.1,Mono 2.4,Linux)中没有子进程模块.似乎甚至没有'os'模块.所以我不能使用os.system().在CPython中,通常使用'subprocess'或'os.system()'的IronPython执行任务的方式是什么?
我想从C#创建一个IronPython类的实例,但我目前的尝试似乎都失败了.
这是我目前的代码:
ConstructorInfo[] ci = type.GetConstructors();
foreach (ConstructorInfo t in from t in ci
where t.GetParameters().Length == 1
select t)
{
PythonType pytype = DynamicHelpers.GetPythonTypeFromType(type);
object[] consparams = new object[1];
consparams[0] = pytype;
_objects[type] = t.Invoke(consparams);
pytype.__init__(_objects[type]);
break;
}
Run Code Online (Sandbox Code Playgroud)
我能够通过调用t.Invoke(consparams)来获取对象的创建实例,但是__init__似乎没有调用该方法,因此我没有使用我从Python脚本设置的所有属性.即使使用显式pytype.__init__调用,构造的对象仍然似乎没有初始化.
使用ScriptEngine.Operations.CreateInstance似乎也不起作用.
我正在使用.NET 4.0和IronPython 2.6 for .NET 4.0.
编辑:关于我打算如何做到这一点的小澄清:
在C#中,我有一个类如下:
public static class Foo
{
public static object Instantiate(Type type)
{
// do the instantiation here
}
}
Run Code Online (Sandbox Code Playgroud)
在Python中,以下代码:
class MyClass(object):
def __init__(self):
print "this should …Run Code Online (Sandbox Code Playgroud) 如何从IronPython脚本访问C#类?C#:
public class MyClass
{
}
public enum MyEnum
{
One, Two
}
var engine = Python.CreateEngine(options);
var scope = engine.CreateScope();
scope.SetVariable("t", new MyClass());
var src = engine.CreateScriptSourceFromFile(...);
src.Execute(scope);
Run Code Online (Sandbox Code Playgroud)
IronPython脚本:
class_name = type(t).__name__ # MyClass
class_module = type(t).__module__ # __builtin__
# So this supposed to work ...
mc = MyClass() # ???
me = MyEnum.One # ???
# ... but it doesn't
Run Code Online (Sandbox Code Playgroud)
UPDATE
我需要导入托管程序集中定义的类.
我创建了一个可以使用一组参数的函数的类.我希望每次事件处理程序发出信号时都运行传递的函数.
我附加下面的代码,当我传递一个fun2没有参数但没有参数的时候fun1.我可以对下面的代码提出的任何建议fun1和fun2?如果我省略return语句fun1,我会收到错误'str' object is not callable.
>>> TimerTest.main()
function 1. this function does task1
my function from init from function1
my function in start of runTimerTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files (x86)\IronPython 2.7\TimerTest.py", line 57, in main
File "C:\Program Files (x86)\IronPython 2.7\TimerTest.py", line 25, in runTime
r
TypeError: str is not callable
import System
from System.Timers import (Timer, ElapsedEventArgs)
class …Run Code Online (Sandbox Code Playgroud) 我是vb.net的新手.我试图从vb.net调用python函数,但收到错误,'Invoke'不是'Microsoft.Scripting.Hosting.ObjectOperations'的成员
Imports Microsoft.Scripting
Imports Microsoft.Scripting.Hosting
Imports IronPython.Hosting
Sub Main
Dim engine As ScriptEngine
Dim scope As ScriptScope
Dim i As Integer
engine = Python.CreateEngine()
scope = engine.ExecuteFile("C:\Working.py")
Dim v = engine.Operations.Invoke(scope.GetVariable(methodName))
Run Code Online (Sandbox Code Playgroud)
'需要调用的方法的名称并获得返回值.任何人都可以推荐我更好的方法来使这项工作?我已经看过这个链接:http://msmvps.com/blogs/theproblemsolver/archive/2008/08/14/calling-ironpython-functions-from-net.aspx
先感谢您.
我正在将一段目前使用numpy的python代码移植到IronPython(其原因与我正在编写的平台的细节有关).
由于numpy和IronPython不兼容,我需要用Math.NET等效替换每个numpy函数,我已将其作为外部引用添加.
作为Math.NET的新手,我很难找到相应的numpy.where()函数.
任何帮助将不胜感激!
我试图在我的Python代码中使用numpy模块函数,我在VS13中的c#应用程序中运行.
我这样做是为了导入模块:
ScriptEngine pyEngine = IronPython.Hosting.Python.CreateEngine();
ScriptScope pyScope = pyEngine.CreateScope();
pyEngine.Execute("import numpy", pyScope);
Run Code Online (Sandbox Code Playgroud)
但是它说"没有名为numpy的模块".我一直在寻找解决方案,并发现: 如何为Ironpython27安装numpy和scipy?旧方法不起作用 使用Nilsters答案我设法安装numpy并且当我从cmd运行ipy时能够使用它.但是我不知道如何在VS的c#app中使用它.我一直在浏览文件并找到了
\ IronPython 2.7\DLLs\NumpyDotNet.dll
并且:
\ IronPython 2.7\Lib\site-packages \numpy \
如何让我的python代码导入numpy?
问题是标题所说.处理需要通过IronPython导入Sympy,Matplotlib和Tkinter的项目.代码将在Rhino中运行,后者使用Python 2.7.有没有办法做到这一点?我看过一个2014年的问题,说Tkinter在IronPython中不起作用,但从那时起事情就有所改善.
SymPy是需要导入的最重要的库.已查看过文档,但有点不清楚.
所以我已经能够将pythonnet安装到我的python解释器中,之后在cmd上用.whl文件进行了大量的处理.现在,当我们尝试在Anaconda(Python 2.7)中导入clr时,我们遇到了以下错误:
所以在编译下面的代码片段之后 -
import clr
clr.AddReference("System.Windows.Forms")
from System import String
from System.Collections import *
from System.Windows.Forms import Form
print "Hello"
Run Code Online (Sandbox Code Playgroud)
我们收到此错误:
'import sitecustomize' failed; use -v for traceback
Hello
Run Code Online (Sandbox Code Playgroud)
import语句下面的任何代码仍然运行(因此'Hello'),但我想知道这个错误意味着什么或导致它的原因.提前致谢.
发表在Rhino论坛上,显然Rhino的IronPython实现中没有任何变化,使其能够引用以前不兼容的库.他们建议改用Eto.谢谢您的帮助!
ironpython ×10
python ×6
c# ×4
.net ×3
numpy ×2
class ×1
ironruby ×1
matplotlib ×1
mono ×1
python.net ×1
rhino ×1
rhinoceros ×1
shell ×1
sympy ×1
tkinter ×1
vb.net ×1
vb6 ×1