Как я могу вызвать конкретный метод из Python Script в С#?
Мне интересно, есть ли возможность вызвать конкретный метод из Python script над проектом С#.
У меня нет кода... но моя идея:
Код Python:
def SetHostInfos(Host,IP,Password):
Work to do...
def CalcAdd(Numb1,Numb2):
Work to do...
Код С#:
SetHostInfos("test","0.0.0.0","PWD")
result = CalcAdd(12,13)
Как я могу вызвать один из методов из этого Python script, над С#?
Ответы
Ответ 1
Вы можете разместить IronPython, выполнить script и получить доступ к функциям, определенным в script, через созданную область.
В следующем примере показана базовая концепция и два способа использования функции из С#.
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
Ответ 2
Вы можете заставить вашу программу python принимать аргументы в командной строке, а затем вызывать ее как приложение командной строки из вашего кода на С#.
Если это так, то есть много ресурсов:
Как запустить Python script с С#?
http://blogs.msdn.com/b/charlie/archive/2009/10/25/hosting-ironpython-in-a-c-4-0-program.aspx
Ответ 3
Я нашел аналогичный способ сделать это, вызов метода намного проще с ним.
Код С# выглядит следующим образом:
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 Script выглядит следующим образом:
#!/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
Итак, вызов метода теперь намного проще с С#
И передача аргументов остается неизменной.
Также с помощью этого кода вы можете получить папку пользовательской библиотеки
для файла Python, который очень хорош, если вы работаете в сети
с большим количеством различных ПК