从.NET调用Python

19 投票
6 回答
32365 浏览
提问于 2025-04-16 21:05

我有一些用Python写的代码,不能直接转到.NET语言里。我需要在我的.NET WinForms应用程序中调用其中一个函数。

现在,我是通过启动Python脚本作为一个单独的进程来实现的,并且把参数作为命令行参数传递给它。这个方法可以用,但我不太喜欢这种解决方案。我想找个更好的方法。

有没有更好的办法可以从.NET应用程序中调用一个.py脚本的函数?最好的方法是什么呢?

注意:IronPython不适用于这个Python脚本

6 个回答

5

除了使用COM选项,你还可以让你的Python脚本创建一个xmlrpc服务器。这样做很简单,你在自己的代码中根本不需要处理“xml”。

然后,在.net那边,你只需通过xmlrpc连接到你的Python应用。如果在C#中找不到合适的方法来做到这一点,你可以在IronPython中写一个客户端函数。

Python文档中的SimpleXMLRPCServer示例就足够用了:

http://docs.python.org/library/simplexmlrpcserver.html

10

这可能比直接启动Python进程要麻烦很多,但这里有一个替代方案。

你可以将Python 嵌入到其他程序中。这个接口是为C语言设计的,而从.NET进行互操作可能会非常麻烦。如果你想用一种更安全的方式来处理原生的Python接口,可以看看Boost.Python,它有一些不太被宣传的功能,其中就包括支持嵌入

使用这些工具,你可以编写一个使用Boost.Python的C++管理DLL,这样就可以加载Python解释器并执行任何Python脚本。因此,你可以在主程序中直接执行任何Python代码,省去了使用外部进程和任何形式的进程间通信。

编辑:据我所知,你只需要在安装过程中添加Python DLL和Boost.Python DLL的部署。

3

这个方法可以用,但我不是很喜欢,想找个更好的办法。

不,尽我所知,确实没有更好的解决方案,特别是如果你不想使用IronPython的话。所以你可以把这个当作一个临时的解决办法,等着把脚本迁移到.NET上,或者等你找到已经有人在.NET上写的类似功能的库。

撰写回答