2011-07-02 14 views
18

Soy un novato completo cuando se trata de IronPython. Tengo que llamar a un script py de un sitio web ASP.NET, y tienen el siguiente código:Hacer referencia a los ensamblados de "importación" de Python cuando se realiza una llamada desde IronPython en C#

var ipy = IronPython.Hosting.Python.CreateRuntime(); 
dynamic test = ipy.UseFile(Server.MapPath(@"~\python\test.py")); 
test.DoWork(); 

La versión de IronPython que estoy usando es 2,7.

La tercera parte de archivos pitón Tengo que llamar tiene las siguientes directivas de importación:

import sys 
from array import * 
from subprocess import * 

Estoy recibiendo el error "No hay ningún módulo llamado sub-proceso". He copiado el archivo subprocess.py del directorio Lib de instalación de IronPython, pero supongo que necesito vincularlo en el código C#.

Gracias.

EDIT:

he encontrado la solución:

ScriptEngine scriptEngine = Python.CreateEngine(); 

var sp = scriptEngine.GetSearchPaths(); 
sp.Add(Server.MapPath(@"~\python\lib")); 
scriptEngine.SetSearchPaths(sp); 

var scope = scriptEngine.Runtime.ExecuteFile(Server.MapPath(@"~\python\test.py")); 

Si alguien tiene alguna comentarios/mejoras no dude en elaborar ya que estoy en la nueva tierra con todo esto Python/IronPython Malarky.

+1

Sólo una nota: también se podría hacer esto desde dentro de la secuencia de comandos de Python si se quería, por [modificando 'sys.path'] (http: // docs.python.org/install/index.html#inst-search-path). Además, es posible que desee publicar su solución como una respuesta y aceptarla, en lugar de mantenerla en el cuerpo de preguntas en sí. – Cameron

+0

Gracias Cameron. Traté de publicarlo como respuesta, pero como soy un nuevo usuario, no pude hacerlo durante 8 horas. Estoy teniendo un problema nuevo que ahora intenta pasar argumentos ... – pfeds

Respuesta

2

Una forma alternativa de hacer esto:

dynamic sys = scriptEngine.ImportModule("sys");    
sys.path.append(somePath); 
Cuestiones relacionadas