You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#启动进程并重定向标准输入输出后,读取标准输出失败

C# 与 Python 脚本通过进程重定向实现双向通信

如果你需要在C#程序中启动Python脚本,并通过标准输入输出实现进程间的双向交互,这里有一段实用的代码示例,核心是通过配置ProcessStartInfo来重定向Python解释器的流,实现数据的发送与接收:

using System;
using System.Diagnostics;
using System.Text;

class PythonInterop
{
    static void Main(string[] args)
    {
        string pyPath = @"C:\Anaconda3\python.exe"; 
        string scriptPath = @"<替换为你的Python脚本路径>"; 
        string workingDir = @"<替换为Python脚本所在目录>"; 

        // 配置进程启动信息
        ProcessStartInfo processStartInfo = new ProcessStartInfo(pyPath)
        {
            // 传递脚本路径作为命令行参数
            Arguments = scriptPath,
            // 设置工作目录为脚本所在目录,避免路径相关问题
            WorkingDirectory = workingDir,
            // 启用标准输入、输出、错误流的重定向
            RedirectStandardInput = true,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            // 不创建独立控制台窗口
            CreateNoWindow = true,
            // 必须设为false才能启用流重定向
            UseShellExecute = false,
            // 设置编码避免中文乱码(与Python脚本编码保持一致)
            StandardOutputEncoding = Encoding.UTF8,
            StandardErrorEncoding = Encoding.UTF8
        };

        // 启动并管理Python进程
        using (Process pythonProcess = Process.Start(processStartInfo))
        {
            // 向Python脚本发送输入数据
            pythonProcess.StandardInput.WriteLine("Hello from C#!");
            pythonProcess.StandardInput.Flush();
            pythonProcess.StandardInput.Close(); // 关闭输入流,告知Python无更多输入

            // 读取Python脚本的输出和错误信息
            string output = pythonProcess.StandardOutput.ReadToEnd();
            string error = pythonProcess.StandardError.ReadToEnd();

            // 等待进程执行完毕
            pythonProcess.WaitForExit();

            // 打印结果
            Console.WriteLine("Python脚本输出内容:");
            Console.WriteLine(output);
            
            if (!string.IsNullOrEmpty(error))
            {
                Console.WriteLine("\nPython脚本错误信息:");
                Console.WriteLine(error);
            }
        }
    }
}

关键注意事项

  • 重定向核心配置:必须将UseShellExecute设为false,同时开启三个流的重定向选项,否则无法实现C#与Python的流交互。
  • 编码一致性:如果脚本涉及非ASCII字符(比如中文),需确保C#端的编码设置与Python脚本一致(通常用UTF-8)。Python脚本开头可添加# -*- coding: utf-8 -*-声明编码。
  • 输入流处理:发送完输入后务必调用Flush()和Close(),否则Python脚本会一直等待输入,导致进程挂起。
  • 资源释放:使用using语句包裹Process对象,确保进程资源在使用后被正确释放,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Wayne Vinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:21:24