¿Hay una forma fácil de llamar objetos de Python desde C#, es decir sin ningún problema COM?usando objetos de Python en C#
Respuesta
Puede echar un vistazo a este post.
Sí, al hospedar IronPython.
En la versión actual de C# no hay una gran manera de lograr esto sin utilizar algún tipo de capa de puente. Puedes alojarlo hasta cierto punto en IronPython, pero es difícil aprovechar las características dinámicas de IronPython ya que C# es un lenguaje muy estáticamente tipado
Sin embargo, si hablas de IronPython, C# 4.0 podrá interoperar con eso sin expresión. C# 4.0 está presentando una nueva característica calldh dynamic que le permite trabajar con cualquier lenguaje que se ejecute en el DLR.
dynamic d = GetSomePythonObject();
d.SomeMethod();
sé de 3 formas:
1) Uso ironpython, y sus proyectos Python pueden interactuar libremente con los proyectos escritos en C#.
2) Exponga sus funciones de Python a COM. Haría esto si necesita usar bibliotecas de Python que no quiere o no puede convertir a Iron Python (por ejemplo, si solo tiene una DLL) El "desastre COM" no es realmente tan malo, si su código Python y su código C# se están ejecutando en la misma máquina. Este código de this tutorial muestra que no es excesivamente fea:
class PythonUtilities:
_public_methods_ = [ 'SplitString' ]
_reg_progid_ = "PythonDemos.Utilities"
# NEVER copy the following ID
# Use "print pythoncom.CreateGuid()" to make a new one.
_reg_clsid_ = "{41E24E95-D45A-11D2-852C-204C4F4F5020}"
def SplitString(self, val, item=None):
import string
if item != None: item = str(item)
return string.split(str(val), item)
# Add code so that when this script is run by
# Python.exe, it self-registers.
if __name__=='__main__':
print "Registering COM server..."
import win32com.server.register
win32com.server.register.UseCommandLine(PythonUtilities)
3) Tener C# y Python se comunican a través de sockets. Haría esto si tiene un código que no puede convertir a Iron Python y necesita acceder a él de forma remota. Esto requiere más trabajo porque necesita ordenar y deshacer los argumentos y devolver valores de bytes o cadenas, pero es lo que hizo un equipo mío cuando necesitábamos hacer C# hablar con un proceso de Python remoto.
- 1. Objetos de Python de objetos existentes usando __new__
- 2. Usando ID de objeto como hash para objetos en Python
- 3. Enviando objetos de subproceso^C a Python en Windows
- 4. Eliminando objetos HtmlElement programáticamente usando C#
- 5. Objetos vs instancia en python
- 6. Entender objetos en Python
- 7. Unión de objetos de diccionario en Python
- 8. Python C API: Usando PyEval_EvalCode
- 9. Creación de objetos Python
- 10. Cómo lanzar objetos en Python
- 11. Declaraciones en C# objetos
- 12. inicialización de objetos en C++
- 13. Creación de objetos en C++
- 14. Devolución de objetos en C++
- 15. Asignación de objetos de seguimiento en python
- 16. Crear una lista de objetos en Python
- 17. 2D matriz de objetos en Python
- 18. valor booleano de objetos en Python
- 19. Crear una lista de objetos en Python
- 20. analizando el código C usando python
- 21. Envolver una clase de C++ en Python usando SWIG
- 22. Accediendo a typedef de C++ en Python usando SWIG
- 23. Compilando Python a C usando Cython
- 24. ¿Usando Django bulk_create objetos en claves foráneas?
- 25. Inicialización de objetos y fábricas de objetos en C++
- 26. puede establecer cualquier propiedad de objetos Python
- 27. convertir objetos de Python para rpy2
- 28. fusionando dos objetos en C#
- 29. var vs objetos en C#
- 30. Seguimiento de objetos: MATLAB contra Python Numpy