通过C#和cPython之间的管道交换数据

时间:2010-11-09 20:16:31

标签: c# python ipc pipe

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

我认为管道可以很好地完成C#端创建命名管道

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

    {// Wait for a client to connect

         pipeServer.WaitForConnection();

该应用程序可以调用python应用程序传递sysarg等管道的名称。

在python端,一旦知道管道名称并使用类似

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

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

应该有用。

C#检测到传入的连接但是python端在一个臭名昭着的错误中“崩溃”:(87,'CallNmaedPipe','参数不正确')。

我不是管道方面的专家,我很想知道这里可能出现的问题。

1 个答案:

答案 0 :(得分:1)

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