usar ejecutar c# python interop ironpython python.net

c# - usar - ejecutar c en python



Llamar a una biblioteca C#de python (5)

Como su publicación está etiquetada IronPython, si desea utilizar la muestra C #, lo siguiente debería funcionar.

import clr clr.AddReference(''assembly name here'') from DataViewerLibrary import PlotData p = PlotData() p.Start()

¿Alguien puede compartir un ejemplo práctico sobre cómo llamar a una biblioteca simple de C # (en realidad su WPF) desde el código python? (He intentado usar IronPython y tuve demasiados problemas con la biblioteca de CPython no compatible que usa mi código python, así que pensé en intentar hacer lo contrario y llamar a mi código C # desde Python).

Este es el ejemplo con el que estaba jugando:

using System.Runtime.InteropServices; using System.EnterpriseServices; namespace DataViewerLibrary { public interface ISimpleProvider { [DispIdAttribute(0)] void Start(); } [ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] public class PlotData : ServicedComponent, ISimpleProvider { public void Start() { Plot plotter = new Plot(); plotter.ShowDialog(); } } }

Plotter es una ventana de WPF que traza una Elipse

No sé cómo llamar a este código de mi pitón todo. ¿Alguna sugerencia?


En realidad es bastante fácil. Simplemente use NuGet para agregar el paquete "UnmanagedExports" a su proyecto .Net. Consulte https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports para obtener más información.

Luego puede exportar directamente, sin tener que hacer una capa COM. Aquí está el código de muestra C #:

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using RGiesecke.DllExport; class Test { [DllExport("add", CallingConvention = CallingConvention.Cdecl)] public static int TestExport(int left, int right) { return left + right; } }

A continuación, puede cargar el dll y llamar a los métodos expuestos en Python (funciona para 2.7)

import ctypes a = ctypes.cdll.LoadLibrary(source) a.add(3, 5)


Este proyecto ha sido desarrollado para ese propósito exacto: use clases de C # en Python común

https://bitbucket.org/pydotnet/pydotnet/wiki/Home

Todo lo que necesita hacer es instalar MSI o EGG en su CPython. PyDotnet es el módulo de Python, por lo que el ejecutable se mantiene regular python.exe desde su instalación de Python o Anaconda. Compatible con 32 bits y 64 bits.

Acceso ilimitado a todas las clases C #, métodos con parámetros de salida y ref, clases genéricas y métodos genéricos, métodos de extensión, miembros privados.

Cargador de ensamblaje sobrecargado con mecanismos personalizados para buscar ensambles.

Información de tipo de tiempo de ejecución de .NET convertible a objeto de clase, que puede crearse una instancia como cualquier otra clase.

Modo de importación especial diseñado especialmente para el shell interactivo de Python, que le permite descubrir conjuntos disponibles, espacios de nombres, clases, métodos, etc.

Estoy esperando comentarios :)



Python para .Net (pythonnet) puede ser una alternativa razonable a IronPython en su situación. https://github.com/pythonnet/pythonnet/blob/master/README.md

Desde el sitio:

Tenga en cuenta que este paquete no implementa Python como un lenguaje CLR de primera clase; no produce código administrado (IL) a partir del código Python. Más bien, es una integración del motor CPython con .NET runtime. Este enfoque le permite usar los servicios de CLR y continuar utilizando el código de Python existente y las extensiones basadas en C mientras mantiene velocidades de ejecución nativas para el código de Python.

también

Python para .NET utiliza el PYTHONPATH (sys.path) para buscar los ensamblajes a cargar, además de la base de aplicación habitual y el GAC. Para asegurarse de que puede importar implícitamente un ensamblaje, coloque el directorio que contiene el ensamblado en sys.path.

Este paquete aún requiere que tenga un tiempo de ejecución CPython local en su máquina. Consulte el archivo Léame completo para obtener más información http://pythonnet.github.io/readme.html