我有什么(我认为)是一个相对简单的任务。我必须为某些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端,一旦知道管道名称并使用类似
的win32pipemessage = 'a test'
pipeName = '\\\\.\\pipe\\Demo'
win32pipe.CallNamedPipe(pipeName, message, 4096 , win32pipe.NMPWAIT_WAIT_FOREVER)
应该有用。
C#检测到传入的连接但是python端在一个臭名昭着的错误中“崩溃”:(87,'CallNmaedPipe','参数不正确')。
我不是管道方面的专家,我很想知道这里可能出现的问题。
答案 0 :(得分:1)
CallNamedPipe需要在PIPE_TYPE_MESSAGE中创建的管道;您的C#代码在PIPE_TYPE_BYTE中创建管道。因此,您需要在C#中使用消息模式创建管道(使用需要PipeTransmissionMode的构造函数),或者使用WriteFile将数据放入管道。