我想知道是否有可能通过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)
如何通过C#调用其中一个方法?#/ p>
答案 0 :(得分:21)
您可以托管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 :(得分:3)
我发现了一种类似的方法,使用它可以更容易地调用方法。
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文件中定义的Library路径提交Dictionary。
所以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
所以从C#开始,方法调用变得更加容易 论证传递保持不变。 使用此代码,您还可以获得自定义库文件夹 对于Python文件,如果你在网络中工作,这是非常好的 有很多不同的PC
答案 2 :(得分:2)
你可以让你的python程序在命令行中获取参数,然后从C#代码中将其称为命令行应用程序。
如果这是要走的路,那么有很多资源:
How do I run a Python script from C#? http://blogs.msdn.com/b/charlie/archive/2009/10/25/hosting-ironpython-in-a-c-4-0-program.aspx