Как вызвать конкретный метод из скрипта Python в C#?

мне интересно, есть ли возможность вызвать определенный метод из скрипта Python над проектом c#.

у меня нет кода... но моя идея такова:--3-->

Python-Кода:

def SetHostInfos(Host,IP,Password):
   Work to do...

def CalcAdd(Numb1,Numb2):
   Work to do...

C# Код:

SetHostInfos("test","0.0.0.0","PWD")
result = CalcAdd(12,13)

Как я могу вызвать один из методов из этого скрипта Python через C#?

3 ответов


вы можете разместить IronPython, выполнить скрипт и получить доступ к функциям, определенным в скрипте, через созданную область.

в следующем примере показана основная концепция и два способа использования функции из C#.

var pySrc =
@"def CalcAdd(Numb1, Numb2):
    return Numb1 + Numb2";

// host python and execute script
var engine = IronPython.Hosting.Python.CreateEngine();
var scope = engine.CreateScope();
engine.Execute(pySrc, scope);

// get function and dynamically invoke
var calcAdd = scope.GetVariable("CalcAdd");
var result = calcAdd(34, 8); // returns 42 (Int32)

// get function with a strongly typed signature
var calcAddTyped = scope.GetVariable<Func<decimal, decimal, decimal>>("CalcAdd");
var resultTyped = calcAddTyped(5, 7); // returns 12m

Я нашел аналогичный способ сделать это, вызов метода намного проще с ним.

код C# выглядит следующим образом:

IDictionary<string, object> options = new Dictionary<string, object>();
options["Arguments"] = new [] {"C:\Program Files (x86)\IronPython 2.7\Lib", "bar"};

var ipy = Python.CreateRuntime(options);
dynamic Python_File = ipy.UseFile("test.py");

Python_File.MethodCall("test");

поэтому в основном я представляю словарь с библиотечным путем, который я хочу определить в моем файле python.

таким образом, скрипт PYthon выглядит следующим образом:

#!/usr/bin/python

import sys
path = sys.argv[0]  #1 argument given is a string for the path
sys.path.append(path)
import httplib
import urllib
import string

def MethodCall(OutputString):
    print Outputstring

таким образом, вызов метода теперь намного проще из C# И аргументация остается прежней. Также с помощью этого кода Вы можете получить пользовательскую папку библиотеки для файл Python, который очень хорош, если вы работаете в сети с большим количеством различных ПК


вы можете заставить свою программу python принимать аргументы в командной строке, а затем вызывать ее как приложение командной строки из кода C#.

Если это путь, то есть куча ресурсов:

как запустить скрипт Python из C#? http://blogs.msdn.com/b/charlie/archive/2009/10/25/hosting-ironpython-in-a-c-4-0-program.aspx