2012-11-05 39 views
10

我想知道是否有可能通過C#項目從Python腳本調用特定方法。如何從C#中的Python腳本調用特定的方法?

我沒有代碼...但我的想法是:

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#?

+2

你吃過看看在http://計算器.com/questions/7053172/how-can-i-call-ironpython-code-from-ac-sharp-app? –

+0

我想將參數傳遞給一個Python方法並獲取返回值......這就是我正在做的事情......而這些都沒有幫助我.. – VanDeath

回答

17

您可以承載的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 
1

我發現了一個類似的方式來做到這一點,該方法的調用更容易。

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的文件,如果你的網絡 中有很多不同的PC的工作,這是非常好的

相關問題