Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Вызов функций написанных на Python в C#


Автор: Poisent 13.11.2007, 23:38
Есть набор функций написанных на Python, необходимо вызвать эти функции из C#, с указанными параметрами и обработать возвращаемые значение.
Аналогичные действия необходимо проделать с JavaScript, Lua, Perl.

Автор: marcusmae 14.11.2007, 00:10
http://pythonnet.sourceforge.net/readme.html
http://www.lua.inf.puc-rio.br/luanet/lua2il/

Для Perl, видимо, только коммерческие портирования в .NET (или я не нашёл?).
А JScript есть и так : доступен через ASP.NET

Автор: Poisent 14.11.2007, 15:02
Мне надо не эти языки под Net, а выпорлнение самих скриптов, в исходном виде с помощью родных компиляторов/интерпритаторов.
Т.Е. есть какой-то сценарий Python, где есть функция Foo(int), которая возхвращает например входной параметр*2. Так вон, мне надо, что б моё приложение запускало этот скрипт в исходном виде, (Python) и получало значение от этого скрипта.

Автор: marcusmae 14.11.2007, 19:38
Цитата(Poisent @  14.11.2007,  15:02 Найти цитируемый пост)
Мне надо не эти языки под Net, а выпорлнение самих скриптов, в исходном виде с помощью родных компиляторов/интерпритаторов.


Понятно. Тогда COM Interop : если не хотите переносить скрипты под .NET, то подключайте интерпретаторы к проекту на C# как COM-объекты. Изучив предлагаемый ими интерфейс взаимодействия, можно научиться запускать на них скрипты. В интернете такой приём мало упоминается, так что перенести вероятно легче. Например, http://www.thescripts.com/forum/thread228381.html примерно то же самое предлагается.

Автор: Void 14.11.2007, 20:16
Сериализовать параметры в JSON, передать их прокси-модулю на скриптовом языке через стандартный ввод вместе с именем функции. Тот вызовет функцию, снова закодирует результат в JSON и вернёт через стандартный вывод.
Почему JSON? Легковесный и отлично поддерживается в каждом из перечисленных языков, для JS вообще родной (http://json.org/json-ru.html). Можно посмотреть на XML-RPC и SOAP. С COM я бы связывался в последнюю очередь.

Для Питона, к примеру, простейший прокси будет выглядеть так:
Код
import sys
import simplejson

def main():
    module, func, args = simplejson.loads(sys.stdin.read())
    result = getattr(__import__(module), func)(*args)
    sys.stdout.write(simplejson.dumps(result))

if __name__ == '__main__':
    main()

Соответственно, подав ему на ввод строку
Цитата
["math", "sqrt", [3]]

получим на выходе 1.73205...

На стороне C# можно использовать http://litjson.sourceforge.net/.

Автор: Poisent 15.11.2007, 14:33
Спасибо за ответы. Буду копать.

Автор: Poisent 15.11.2007, 23:51
А где можно выудить названия COM объектов соответствующих необходимым мне интерпритаторам.

Автор: marcusmae 16.11.2007, 00:36
Цитата(Poisent @  15.11.2007,  23:51 Найти цитируемый пост)
А где можно выудить названия COM объектов соответствующих необходимым мне интерпритаторам.


Попробовать поподключать к проекту какие-нибудь exe/dll интерпретаторов. Он сам попробует выудить. Или при подключении в References проекта перейти на вкладку COM и найти их там. Список COMов строится, тк система знает, какие COM-объекты в ней зарегестрировались - эта информация хранится в реестре.

Автор: Poisent 16.11.2007, 09:06
Цитата(marcusmae @  16.11.2007,  00:36 Найти цитируемый пост)
Попробовать поподключать к проекту какие-нибудь exe/dll интерпретаторов. Он сам попробует выудить. Или при подключении в References проекта перейти на вкладку COM и найти их там. Список COMов строится, тк система знает, какие COM-объекты в ней зарегестрировались - эта информация хранится в реестре

Я знаю архитектуру COM. Установил Python, он не предоставляет COM объектов.

Автор: marcusmae 16.11.2007, 09:50
Цитата(Poisent @  16.11.2007,  09:06 Найти цитируемый пост)
Я знаю архитектуру COM. Установил Python, он не предоставляет COM объектов.


Хорошо, во всяком случае, через COM можно взаимодействовать непосредственно с питоновским скриптом. Как зарегистрировать в нём COM-объект, показано http://www.pyzine.com/Issue007/Section_Articles/article_PythonCOM.html.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)