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

4

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

我认为使用管道会很好地完成这项工作,因此C#端创建了一个命名管道:

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

    {// Wait for a client to connect

         pipeServer.WaitForConnection();

这个应用程序可以通过传递sysarg中的管道名称来p/invoke Python应用程序。

在Python端,一旦知道了管道名称并使用win32pipe,就可以进行类似以下的操作:

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

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

应该可以工作。

发生的情况是,C#检测到传入的连接,但Python端会因报错(87,“CallNamedPipe”,“参数不正确”)而“崩溃”。

我对管道并不是很精通,也不知道这里可能出了什么问题。

1个回答

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接