Ссылка на "импорт" сборок Python при вызове из IronPython в C # - PullRequest
18 голосов
/ 02 июля 2011

Я полный нуб, когда дело доходит до IronPython. Мне нужно вызвать скрипт py с веб-сайта ASP.NET и получить следующий код:

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

Используемая версия IronPython - 2.7.

Сторонний Python-файл, который мне нужно вызвать, имеет следующие директивы импорта:

import sys
from array import *
from subprocess import *

Я получаю сообщение об ошибке «Нет модуля с именем подпроцесса». Я скопировал файл subprocess.py из установочного каталога IronPython, но я предполагаю, что мне нужно сослаться на него в коде C #?

Спасибо.

EDIT:

Я нашел решение:

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

Если у кого-то есть какие-либо комментарии / улучшения, пожалуйста, не стесняйтесь подробно рассказывать, как я нахожусь в новом свете со всей этой малярией Python / IronPython.

1 Ответ

2 голосов
/ 10 ноября 2011

Альтернативный способ сделать это:

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