python在C#应用程序中的集成
本文关键字:集成 应用程序 python | 更新日期: 2023-09-27 17:58:48
我有以下问题:我有一个用python编写的旧应用程序。这个应用程序允许用户指定将要执行的小python步骤,python步骤基本上是小python脚本,我称它们为步骤,因为这个应用程序的执行涉及其他步骤,比如从命令行执行一些东西。这些python步骤作为python代码存储在一个xml文件中。
现在我想用C#.NET重写应用程序。有没有这样的最佳实践解决方案?
我不想调用python作为外部程序,并将实际的python步骤(脚本)传递给python解释器-我想要一些内置的东西。我刚刚遇到了IronPython和.NET python,但我不太确定该使用哪一个。我想对小脚本进行某种调试,这就是为什么调用解释器解决方案是不可接受的。
更重要的是,许多这样的脚本已经存在。因此,我必须使用python的C#实现,它具有与python相同的语法以及python的内置库。这可能吗?
谢谢和问候Xeun
IronPython就是您想要的。它编译成.NET字节码。您可以相当容易地从另一种.NET语言调用python代码(以及其他方法)。IronPython在Visual Studio中也受支持。
Python脚本可以使用IronPython从C#执行。
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的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是免费的,而且非常容易使用。希望这有帮助:)