如何在C#应用中不通过磁盘读写直接将图像作为参数传给Python脚本
C# 向Python子进程传输内存图像流的实现方案
你可以通过重定向子进程的标准输入流,直接把图像二进制数据传递给Python脚本,完全跳过磁盘写入步骤,大幅提升运行效率。
修改后的C#参考代码
var psi = new ProcessStartInfo(); psi.FileName = @"python_interpreter_path"; var script = @"my_python_script_path"; psi.Arguments = script; psi.UseShellExecute = false; psi.CreateNoWindow = true; // 新增配置:启用标准输入重定向 psi.RedirectStandardInput = true; psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; var errors = ""; var results = ""; using (var process = Process.Start(psi)) { // 替换为你自己的逻辑:将内存中的图像对象编码为jpg/png格式的字节数组 byte[] imageBinary = GetImageBinaryFromMemory(); // 将图像二进制数据写入Python进程的标准输入 using (var stdin = process.StandardInput.BaseStream) { stdin.Write(imageBinary, 0, imageBinary.Length); } // 读取Python脚本的输出和错误信息 errors = process.StandardError.ReadToEnd(); results = process.StandardOutput.ReadToEnd(); process.WaitForExit(); Console.WriteLine(errors); Console.WriteLine(results); }
关键注意事项
- 你需要自行实现
GetImageBinaryFromMemory()方法,编码格式需要和Python脚本的解码逻辑保持一致即可。 - 写入完成后必须关闭标准输入流(上述代码通过using语法自动释放),否则Python进程会一直等待输入结束,造成阻塞。
- 如果传输的图像体积较大,建议改为异步读取标准输出和标准错误,避免缓冲区满导致的死锁问题。
内容的提问来源于stack exchange,提问作者Felipe Cunha
相关产品推荐
相关产品推荐

