2009-05-10 17 views

Respuesta

1

Puede echar un vistazo a este post.

8

Sí, al hospedar IronPython.

6

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(); 
5

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.