2012-11-05 16 views
10

Zastanawiam się, czy istnieje możliwość wywołania konkretnej metody ze skryptu w języku Python w projekcie C#.Jak wywołać określoną metodę ze skryptu w języku Python w języku C#?

nie mam kodu ... ale mój pomysł jest:

kod Python:

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

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

C# Kod:

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

Jak mogę nazwać jedną z metod, z ten skrypt w języku Python, nad C#?

+2

Miałeś spojrzeć na http: // stackoverflow .pl/questions/7053172/how-can-i-call-ironpython-code-from-ac-sharp-app? –

+0

Chcę przekazać Argumenty do metody Pythona i uzyskać wartość zwracaną ... To właśnie próbuję zrobić ... i żadna z nich nie pomogła mi .. – VanDeath

Odpowiedz

17

Można zorganizować IronPython, wykonanie skryptu i dostęp do funkcji zdefiniowanych w skrypcie za pośrednictwem utworzonego zakresu.

Poniższy przykład przedstawia podstawową koncepcję i dwa sposoby korzystania z funkcji z 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 
1

znalazłem podobny sposób to zrobić, wywołanie tej metody jest znacznie łatwiej z nim.

C# kod wygląda następująco:

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

Więc zasadniczo złożyć Słownika ze ścieżki biblioteki, które chcę, aby zdefiniować w moim pliku Pythona.

więc skrypt Pythona wygląda następująco:

#!/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 

więc wywołanie metody jest teraz znacznie łatwiejsze od C# A upływ argumentem pozostaje taka sama. Również z tego kodu jesteś w stanie dostać folder niestandardowe biblioteki dla pliku Pythona, który jest bardzo miły, jeśli pracujesz w sieci z wielu różnych komputerów

Powiązane problemy