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

4 投票
1 回答
1881 浏览
提问于 2025-04-16 06:48

我有一个我认为相对简单的任务。我需要给一个C#的应用程序提供一种方式,去调用我的Python应用程序,并传递一些数据进行处理,最后在Python任务结束时接收结果(这两个都是图形界面的应用程序)。

我想使用管道来完成这个工作,C#那边创建一个命名管道,像这样:

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

    {// Wait for a client to connect

         pipeServer.WaitForConnection();

然后应用程序可以通过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这个函数需要一个以消息模式创建的管道,而你在C#代码中创建的是字节模式的管道。所以你要么需要在C#中创建一个消息模式的管道(使用一个需要PipeTransmissionMode的构造函数),要么使用WriteFile函数把数据写入管道。

撰写回答