在C#应用中集成Python
我遇到了一个问题:
我有一个旧的应用程序,是用Python写的。这个应用程序允许用户指定一些小的Python步骤,这些步骤会被执行。其实这些步骤就是一些小的Python脚本,我叫它们“步骤”,因为这个应用程序的执行还涉及其他步骤,比如从命令行执行某些操作。这些Python步骤的代码是存储在一个XML文件里的。
现在我想用C# .NET重写这个应用程序。有没有什么好的方法可以做到这一点呢?
我不想把Python当作外部程序来调用,也不想把实际的Python步骤(脚本)传给Python解释器——我想要的是内置的解决方案。我刚刚听说了IronPython和.NET Python,但我不太确定该用哪个。
我希望能对这些小脚本进行调试,这就是为什么调用解释器的方案对我来说不可接受。
更重要的是,这些脚本已经存在很多了。因此,我必须使用一个C#实现的Python,它的语法和Python一样,并且内置的库也要和Python相同。这可能吗?
谢谢,问候
Xeun
3 个回答
你可以使用IronPython中的ScriptScope.GetVariable来获取实际的函数,然后就可以像调用C#函数一样调用它。用法如下:
C#代码:
var var1, var2 = ...
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
engine.ExecuteFile(@"C:\test.py", scope);
dynamic testFunction = scope.GetVariable("test_func");
var result = testFunction(var1,var2);
Python代码:
def test_func(var1,var2):
...do something...
我花了一些时间才搞明白这个,其实很简单。而且IronPython是免费的,使用起来也挺简单的。希望这对你有帮助 :)
你可以通过IronPython在C#中运行Python脚本。
var ipy = Python.CreateRuntime();
dynamic test = ipy.UseFile("Test.py");
test.Simple();
更多信息请查看:
http://putridparrot.com/blog/hosting-ironpython-in-a-c-application/
以及
https://blogs.msdn.microsoft.com/charlie/2009/10/25/running-ironpython-scripts-from-a-c-4-0-program/
IronPython 是你需要的工具。它可以把代码编译成 .NET 的字节码。这样,你就可以比较简单地从其他 .NET 语言中调用 Python 代码,反过来也可以。听说 IronPython 在 Visual Studio 中也有支持。