c# - 通过 C# 和 cPython 之间的管道交换数据

标签 c# python ipc pipe

我有一个(我认为)相对简单的任务。我必须向某些 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/

相关文章:

python - 如何一步一步从预测概率中获取预测类别标签?

c++ - 子进程卡住 popen().stdout.read

android AIDL 接口(interface)、parcelables 和向后兼容性

python - 如何从python中的 float 中提取数字

c# - AmbiguousActionException : Multiple actions matched. 以下操作匹配路由数据并满足所有约束

c# - 对 Await/Async 和 Task 的说明

c# - "Parameter Not Valid"调用 GetHenhmetafile(),试图将内存中的图形对象保存为 EMF

python - 使用 distutils 和 build_clib 构建 C 库

python - 如何将 Python 进程的输出重定向到 Rust 进程?

c# - UPS API - LabelLinksIndicator - 未设置对象实例的对象引用