我有一个(我认为)相对简单的任务。我需要提供一种方法给某个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”,“参数不正确”)而“崩溃”。
我对管道并不是很精通,也不知道这里可能出了什么问题。