标签: ironpython

使用.net库自动执行任务的最佳技术是什么?

想象一下,您需要开发和安排应用程序/脚本来执行以下操作: -

  • 引用一个或多个.net程序集
  • 查询API,获取一些对象
  • 为每个对象调用API中的另一个方法

你会用什么?

在过去,我已经创建了上述的小型控制台应用程序,但它看起来有点笨拙和矫枉过正.

我想像PowerShell或IronPython这样的东西可能更合适.

有什么建议?

.net powershell scripting automation ironpython

6
推荐指数
2
解决办法
364
查看次数

在C#中捕获Ironpython异常

我在C#中嵌入了IronPython 2.0.在IronPython中,我用以下内容定义了自己的异常:

def foobarException(Exception):
    pass 
Run Code Online (Sandbox Code Playgroud)

并将其提升到某个地方:

raise foobarException( "This is the Exception Message" )
Run Code Online (Sandbox Code Playgroud)

现在在C#中,我有:

try
{
   callIronPython();
}
catch (Exception e)
{
   // How can I determine the name (foobarException) of the Exception
   // that is thrown from IronPython?   
   // With e.Message, I get "This is the Exception Message"
}
Run Code Online (Sandbox Code Playgroud)

ironpython exception

6
推荐指数
2
解决办法
6658
查看次数

在C#中使用Python对象

有没有一种从C#调用Python对象的简单方法,即没有任何COM混乱?

c# python ironpython

6
推荐指数
3
解决办法
9459
查看次数

如何让lxml在IronPython下工作?

我需要移植一些代码,这些代码严重依赖于从CPython应用程序到IronPython的lxml.

lxml非常Pythonic,我想在IronPython下继续使用它,但它依赖于libxslt和libxml2,它们是C扩展.

有没有人知道在IronPython下允许lxml或没有那些C-extension依赖项的lxml版本的变通方法?

.net python xml lxml ironpython

6
推荐指数
1
解决办法
2157
查看次数

IronPython和pdb.set_trace()

有谁知道IronPython 2.6是否计划支持pdb.set_trace()以启用ironpython模块中的断点?如果没有,是否有人建议在没有pdb的情况下完成此操作?

ironpython pdb

6
推荐指数
1
解决办法
938
查看次数

C#/ IronPython与共享C#类库互操作

我正在尝试使用IronPython作为C#GUI和一些C#库之间的中介,以便它可以在编译后编写脚本.

我有一个类库DLL,由GUI和python使用,是这样的:

namespace MyLib
{
    public class MyClass
    {
        public string Name { get; set; }
        public MyClass(string name)
        {
            this.Name = name;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

IronPython代码如下:

import clr
clr.AddReferenceToFile(r"MyLib.dll")
from MyLib import MyClass

ReturnObject = MyClass("Test")
Run Code Online (Sandbox Code Playgroud)

然后,在C#中,我将其称为如下:

ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = null;

scope = engine.CreateScope();
ScriptSource source = engine.CreateScriptSourceFromFile("Script.py");

source.Execute(scope);

MyClass mc = scope.GetVariable<MyClass>("ReturnObject ")
Run Code Online (Sandbox Code Playgroud)

当我调用最后一段代码时,source.Execute(scope)运行成功返回,但是当我尝试GetVariable调用时,它抛出以下异常

Microsoft.Scripting.ArgumentTypeException: expected MyClass , got MyClass 
Run Code Online (Sandbox Code Playgroud)

所以,你可以看到类名完全相同,但由于某种原因,它认为它们是不同的.

DLL与.py文件位于不同的目录中(我只是没有写出所有路径设置的东西),可能是因为IronPython的解释器存在问题,因为它看起来不同,因为它是某种方式看到他们处于不同的背景或范围?

c# ironpython interop c#-4.0

6
推荐指数
1
解决办法
2118
查看次数

IronPython:在IronPython Interactive中导入随机失败

这在Visual Studio 2010 中的IronPython Interactive中失败:

» import random
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named random
Run Code Online (Sandbox Code Playgroud)

这在Visual Studio中的IronPython代码中也可以正常工作.如果我ipy.exe在Windows命令提示符下启动它也可以正常工作.IronPython Interactive和导入有什么问题?如何修复Python Interactive以便它可以导入Python模块?

IronPython Interactive中的sys.path给出了:

» import sys
» sys.path
['.',
 'C:\\PROGRAM FILES (X86)\\MICROSOFT VISUAL STUDIO 10.0\\COMMON7\\IDE\\EXTENSIONS\\MICROSOFT\\IRONSTUDIO\\0.4\\Lib',
 'C:\\PROGRAM FILES (X86)\\MICROSOFT VISUAL STUDIO 10.0\\COMMON7\\IDE\\EXTENSIONS\\MICROSOFT\\IRONSTUDIO\\0.4\\DLLs']
Run Code Online (Sandbox Code Playgroud)

Windows命令提示符下的ipy.exe中的sys.path给出:

>>> import sys
>>> sys.path
['.',
 'C:\\Users\\MyName\\Desktop',
 'C:\\Program Files (x86)\\IronPython 2.7\\Lib',
 'C:\\Program Files (x86)\\IronPython 2.7\\DLLs',
 'C:\\Program Files (x86)\\IronPython 2.7',
 'C:\\Program Files (x86)\\IronPython 2.7\\lib\\site-packages']
Run Code Online (Sandbox Code Playgroud)

我使用的是IronPython 2.7,Visual Studio 2010和Windows …

import ironpython visual-studio-2010

6
推荐指数
1
解决办法
2127
查看次数

从IronPython实例化自定义C#类

有没有办法让一个类可用于IronPython脚本,以便我可以在代码中创建对象?

例如,如果我有一个类,我希望能够从C#代码中定义的名为MyClass的脚本中实例化,如下所示:

public class MyClass
{
    string text;

    public MyClass(string text)
    {
        this.text = text;
    }

    public void Write()
    {
        Console.WriteLine(text);
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能在Python脚本中这样做?

obj = MyClass("Hello, World!")
obj.Write()
Run Code Online (Sandbox Code Playgroud)

谢谢!

c# ironpython class embedding

6
推荐指数
1
解决办法
5112
查看次数

安装Python包 - IronPython

我想将PRAW包添加到VS中的IronPython解决方案中,但它确实是一个痛苦的屁股.这是我正在采取的步骤

  • 右键单击IronPython Environment,选择install python package.
  • 使用pip键入"Praw"
  • 我得到一个提示,告诉我pip需要安装.

然后我看到以下内容:

Installing 'pip' package manager.
Downloading distribute from https://go.microsoft.com/fwlink/?LinkID=306663
Installing from distribute-0.6.45
Before install bootstrap.
Scanning installed packages
Setuptools installation detected at c:\program files (x86)\ironpython 2.7\lib\site-packages\setuptools-0.6c11-py2.7.egg
Egg installation
Already patched.
running install
Traceback (most recent call last):
  File "setup.py", line 147, in <module>
  File "C:\Program Files (x86)\IronPython 2.7\Lib\distutils\core.py", line 151, in setup
  File "C:\Program Files (x86)\IronPython 2.7\Lib\distutils\dist.py", line 952, in run_commands
  File "C:\Program Files (x86)\IronPython 2.7\Lib\distutils\dist.py", line 971, in run_command
  File "c:\users\mj\appdata\local\temp\ptvs-9jvsvw-pip_downloader\distribute-0.6.45\setuptools\command\install.py", line …
Run Code Online (Sandbox Code Playgroud)

python ironpython ptvs

6
推荐指数
1
解决办法
1万
查看次数

是否可以在IronPython脚本中使用lambdas调用Rx扩展方法?

有人可以解释一下这个非常奇怪的观察吗?

我一直试图从IronPython内部调用Rx扩展方法,结果证明它根本不可能.我把它归结为这个简单的例子:

import clr
clr.AddReference("System.Core")
from System.Linq import Enumerable

def process(value):
  return Enumerable.Select(value, lambda x:x)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们从正常的LINQ开始.如果我process使用数组或任何其他IEnumerable对象从我的托管环境调用该函数,它的工作完全正常.

那么我试着简单地替换引用以使用Observable扩展方法,如下所示:

import clr
clr.AddReference("System.Reactive.Linq")
from System.Reactive.Linq import Observable

def process(value):
  return Observable.Select(value, lambda x:x)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我process用一个IObservable对象调用该函数,则调用崩溃时会出现一条丑陋的错误消息:

expected IObservable[object], got Select[int, int]

有没有人遇到这样的事情?我错过了什么吗?是否有一些特殊情况黑客可以使缺少的Enumerablelambda代理工作Observable?我不得不承认我在这里完全不知所措.

顺便说一句,正如一个完整性检查,以下示例正常工作:

import clr
clr.AddReference("System.Reactive.Linq")
from System.Reactive.Linq import Observable

def process(value):
  return Observable.Sum(value)
Run Code Online (Sandbox Code Playgroud)

我想把它留在那里只是为了清楚问题确实在方法调用中Observable.Select.

linq ironpython system.reactive reactivex

6
推荐指数
1
解决办法
115
查看次数