通过管道在C#和cPython间交换数据
我有一个我认为相对简单的任务。我需要给一个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函数把数据写入管道。