我有一个(我认为)相对简单的任务。我必须向某些 C# 应用程序提供一种方法来调用我的 Python 应用程序并传递一些数据进行处理并在 Python 任务结束时接收结果(两者都是 GUI 应用程序。
我认为管道可以很好地完成 C# 端的工作,从而创建一个命名管道
using (NamedPipeServerStream pipeServer =
new NamedPipeServerStream("Demo", PipeDirection.InOut))
{// Wait for a client to connect
pipeServer.WaitForConnection();
应用程序可以 p/调用 python 应用程序,在 sysarg 中传递管道名称等。
在 python 方面,一旦知道管道名称并使用类似 win32pipe 的东西
message = 'a test'
pipeName = '\\\\.\\pipe\\Demo'
win32pipe.CallNamedPipe(pipeName, message, 4096 , win32pipe.NMPWAIT_WAIT_FOREVER)
应该可以。
发生的情况是 C# 检测到传入连接,但 python 端因臭名昭著的错误而“崩溃”:(87,'CallNmaedPipe','参数不正确')。
我不是管道方面的专家,不知道这里可能出了什么问题。
最佳答案
CallNamedPipe 需要在 PIPE_TYPE_MESSAGE 中创建的管道;您的 C# 代码在 PIPE_TYPE_BYTE 中创建了一个管道。因此,您要么需要在 C# 中以消息模式创建管道(使用需要 PipeTransmissionMode 的构造函数),要么使用 WriteFile 将数据放入管道。
关于c# - 通过 C# 和 cPython 之间的管道交换数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138124/