2012-11-05 34 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的工作,这是非常好的

相关问题