【问题标题】:exchanging data through pipes between C# and cPython通过 C# 和 cPython 之间的管道交换数据
【发布时间】:2011-05-07 11:47:20
【问题描述】:

我有什么(我认为)是一个相对简单的任务。我必须为某些 C# 应用程序提供一种方法来调用我的 Python 应用程序并传递一些数据以进行处理并在 Python 任务结束时接收回结果(两者都是 GUI 应用程序。

我认为在 C# 端创建命名管道时,管道可以很好地完成这项工作

    using (NamedPipeServerStream pipeServer =
    new NamedPipeServerStream("Demo", PipeDirection.InOut))      

    {// Wait for a client to connect

         pipeServer.WaitForConnection();

应用程序可以 p/invoke python 应用程序传递 sysarg 中的管道名称等。

在 python 方面,一旦知道管道名称并使用 win32pipe 之类的东西

message = 'a test'
pipeName = '\\\\.\\pipe\\Demo'

win32pipe.CallNamedPipe(pipeName, message, 4096 , win32pipe.NMPWAIT_WAIT_FOREVER) 

应该可以。

发生的情况是 C# 检测到传入连接,但 python 端“崩溃”了一个臭名昭著的错误:(87,'CallNmaedPipe",'The parameter is wrong')。

我不是管道方面的专家,不知道这里可能出了什么问题。

【问题讨论】:

    标签: c# python ipc pipe


    【解决方案1】:

    CallNamedPipe 需要在 PIPE_TYPE_MESSAGE 中创建的管道;您的 C# 代码在 PIPE_TYPE_BYTE 中创建一个管道。因此,您要么需要在 C# 中以消息模式创建管道(使用期望 PipeTransmissionMode 的构造函数),要么使用 WriteFile 将数据放入管道。

    【讨论】:

      猜你喜欢
      • 2010-12-26
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 2014-08-13
      • 1970-01-01
      • 2011-01-04
      相关资源
      最近更新 更多