2011-07-02 8 views
18

Jestem kompletnym noobem, jeśli chodzi o IronPython. Muszę zadzwonić do skryptu py z witryny ASP.NET, i mają następujący kod:Odwoływanie się do "importowania" zestawów Pythona podczas wywoływania z IronPython w języku C#

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

Wersja IronPython używam 2.7.

The 3rd Party plik python Muszę zadzwonić posiada następujące wytyczne importowania:

import sys 
from array import * 
from subprocess import * 

Otrzymuję błąd "Nr moduł o nazwie podproces". Skopiowałem plik subprocess.py z katalogu instalacyjnego IronPython Lib, ale zakładam, że muszę do niego linkować w kodzie C#?

Dzięki.

EDIT:

znalazłem rozwiązanie:

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")); 

Jeśli ktoś ma jakieś uwagi/ulepszenia proszę czuć swobodnie rozwinąć skoro jestem w nowej ziemi z tym wszystkim Pythonie/IronPython malarky.

+1

Tylko uwaga: można to zrobić także od wewnątrz skryptu Python, jeśli chciał, by [modyfikacji 'sys.path'] (http: // docs.python.org/install/index.html#inst-search-path). Możesz również zamieścić swoje rozwiązanie jako odpowiedź i zaakceptować je, zamiast trzymać je w treści pytania. – Cameron

+0

Dzięki Cameron. Próbowałem opublikować to jako odpowiedź, ale ponieważ jestem nowym użytkownikiem, nie mogłem przez 8 godzin. Mam nowy problem, który próbuje teraz przekazywać argumenty ... – pfeds

Odpowiedz

2

Alternatywnym sposobem osiągnięcia tego celu:

dynamic sys = scriptEngine.ImportModule("sys");    
sys.path.append(somePath); 
Powiązane problemy