首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从.NET调用Python

从.NET调用Python
EN

Stack Overflow用户
提问于 2011-07-08 20:35:49
回答 5查看 28.1K关注 0票数 18

我有一些用Python语言编写的代码,这些代码不能转换为.NET语言。我需要从我的.NET WinForms应用程序中调用其中一个函数。

现在,我将Python脚本作为单独的进程启动,并将参数作为命令行参数传递给它。它是有效的,但我并不是真的喜欢这个解决方案。我想把它改进成更好的。

有没有更好的方法从.NET应用程序调用.py脚本的函数?做这件事最好的方法是什么?

注意:IronPython不是此Python脚本的选项

EN

回答 5

Stack Overflow用户

发布于 2011-07-08 21:18:18

这可能比启动Python进程要多得多,但这里有一个替代解决方案。

你可以通过embed Python进入另一个程序。.NET的应用编程接口是针对C的,而互操作可能会是一个主要的难题。如果您希望以一种更安全的方式来处理原生Python API,那么可以研究一下Boost.Python,它具有support for embedding,这是其宣传较少的特性之一。

使用这些工具,您可以编写使用Boost.Python加载C++解释器和执行任何Python脚本的Python。因此,您可以直接在宿主进程中执行任何Python代码,从而消除了对外部进程和任何形式的IPC的使用。

编辑:AFAIK,你需要在安装过程中添加的就是Python DLL和Boost.Python DLL的部署。

票数 10
EN

Stack Overflow用户

发布于 2011-07-08 21:13:51

除了COM选项之外,您还可以让Python脚本实例化一个xmlrpc服务器-它非常透明,而且您永远不需要在自己的代码中处理"xml“。

然后,在xmlrpc端,您只需通过.net连接到您的python应用程序-如果在C#中没有合适的方法,只需用IronPython编写一个客户端函数即可。

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

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

票数 5
EN

Stack Overflow用户

发布于 2012-05-23 19:03:16

我认为你需要重新评估卡洛斯的答案。请参阅Mark Hammond的《Win32上的Python Programming》一书中的使用Python实现COM对象部分。

您应该能够创建一个COM对象,然后让.Net与其交互。

在本书中,下面将使用单个方法创建一个COM服务器。

代码语言:javascript
复制
# SimpleCOMServer.py - A sample COM server - almost as small as they come!
# 
# We expose a single method in a Python COM object.
class PythonUtilities:
    _public_methods_ = [ 'SplitString' ]
    _reg_progid_ = "PythonDemos.Utilities"
    # NEVER copy the following ID 
    # Use "print pythoncom.CreateGuid()" to make a new one.
    _reg_clsid_ = "{41E24E95-D45A-11D2-852C-204C4F4F5020}"

    def SplitString(self, val, item=None):
        import string
        if item != None: item = str(item)
        return string.split(str(val), item)

# Add code so that when this script is run by
# Python.exe, it self-registers.
if __name__=='__main__':
    print "Registering COM server..."
    import win32com.server.register
    win32com.server.register.UseCommandLine(PythonUtilities)

这本书接着说:"..你可以像执行一个普通的Python脚本一样执行代码,最简单的方法是在PythonWin中打开源文件,然后使用文件菜单中的Run命令。“

我认为你需要Activestate的ActivePython发行版才能做到这一点。

请参阅此问题Consuming Python COM Server from .NET

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6624503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档