从.NET调用Python
我有一些用Python写的代码,不能直接转到.NET语言里。我需要在我的.NET WinForms应用程序中调用其中一个函数。
现在,我是通过启动Python脚本作为一个单独的进程来实现的,并且把参数作为命令行参数传递给它。这个方法可以用,但我不太喜欢这种解决方案。我想找个更好的方法。
有没有更好的办法可以从.NET应用程序中调用一个.py
脚本的函数?最好的方法是什么呢?
注意:IronPython不适用于这个Python脚本
6 个回答
除了使用COM选项,你还可以让你的Python脚本创建一个xmlrpc服务器。这样做很简单,你在自己的代码中根本不需要处理“xml”。
然后,在.net那边,你只需通过xmlrpc连接到你的Python应用。如果在C#中找不到合适的方法来做到这一点,你可以在IronPython中写一个客户端函数。
Python文档中的SimpleXMLRPCServer示例就足够用了:
这可能比直接启动Python进程要麻烦很多,但这里有一个替代方案。
你可以将Python 嵌入到其他程序中。这个接口是为C语言设计的,而从.NET进行互操作可能会非常麻烦。如果你想用一种更安全的方式来处理原生的Python接口,可以看看Boost.Python
,它有一些不太被宣传的功能,其中就包括支持嵌入。
使用这些工具,你可以编写一个使用Boost.Python
的C++管理DLL,这样就可以加载Python解释器并执行任何Python脚本。因此,你可以在主程序中直接执行任何Python代码,省去了使用外部进程和任何形式的进程间通信。
编辑:据我所知,你只需要在安装过程中添加Python DLL和Boost.Python
DLL的部署。
这个方法可以用,但我不是很喜欢,想找个更好的办法。
不,尽我所知,确实没有更好的解决方案,特别是如果你不想使用IronPython的话。所以你可以把这个当作一个临时的解决办法,等着把脚本迁移到.NET上,或者等你找到已经有人在.NET上写的类似功能的库。