在C#应用中集成Python

23 投票
3 回答
75271 浏览
提问于 2025-04-18 03:06

我遇到了一个问题:

我有一个旧的应用程序,是用Python写的。这个应用程序允许用户指定一些小的Python步骤,这些步骤会被执行。其实这些步骤就是一些小的Python脚本,我叫它们“步骤”,因为这个应用程序的执行还涉及其他步骤,比如从命令行执行某些操作。这些Python步骤的代码是存储在一个XML文件里的。

现在我想用C# .NET重写这个应用程序。有没有什么好的方法可以做到这一点呢?

我不想把Python当作外部程序来调用,也不想把实际的Python步骤(脚本)传给Python解释器——我想要的是内置的解决方案。我刚刚听说了IronPython和.NET Python,但我不太确定该用哪个。

我希望能对这些小脚本进行调试,这就是为什么调用解释器的方案对我来说不可接受。

更重要的是,这些脚本已经存在很多了。因此,我必须使用一个C#实现的Python,它的语法和Python一样,并且内置的库也要和Python相同。这可能吗?

谢谢,问候

Xeun

3 个回答

5

你可以使用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是免费的,使用起来也挺简单的。希望这对你有帮助 :)

9

你可以通过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/

18

IronPython 是你需要的工具。它可以把代码编译成 .NET 的字节码。这样,你就可以比较简单地从其他 .NET 语言中调用 Python 代码,反过来也可以。听说 IronPython 在 Visual Studio 中也有支持。

撰写回答