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

从C#控制台应用调用Python CLI脚本无输出问题求助

解决C#调用Python脚本无输出的问题

问题分析

你的代码存在几个关键问题导致无输出:

  • 路径错误:
    @"\python.exe" 和 "\pythonScript.py" 使用了根目录路径(开头的反斜杠),除非Python解释器和脚本确实在系统根目录,否则会找不到文件,直接导致进程无法正常启动或执行脚本。

  • 缺少必要参数:
    Python脚本通过argparse定义了两个必填位置参数FirstName和LastName,但C#调用时只传入了脚本路径,未提供这两个参数,导致Python脚本执行时抛出参数错误,输出内容会被写入标准错误流而非标准输出流。

  • 未捕获错误输出:
    你读取了标准错误流但未打印,即使Python脚本报错也看不到问题原因;同时同步读取标准错误和输出的顺序可能导致死锁(进程等待输出被读取,而代码卡在读取其中一个流的步骤)。

修复后的代码

Python脚本(无需修改)

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('FirstName')
parser.add_argument('LastName')

args = parser.parse_args()
first_name = args.FirstName
last_name = args.LastName

print(f"{first_name} {last_name}")

修复后的C#代码

using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;

namespace CS_PythonTest
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            var psi = new ProcessStartInfo();
            // 修正Python路径:若已加入系统PATH直接写"python.exe",否则写完整绝对路径
            psi.FileName = "python.exe";
            // 修正脚本路径:获取当前程序所在目录的脚本路径
            var scriptPath = Path.Combine(Environment.CurrentDirectory, "pythonScript.py");

            // 添加Python脚本需要的两个参数
            psi.Arguments = $"{scriptPath} Alice Smith";
        
            psi.UseShellExecute = false;
            psi.CreateNoWindow = true;
            psi.RedirectStandardOutput = true;
            psi.RedirectStandardError = true;

            var errors = "";
            var results = "";

            using (var process = Process.Start(psi))
            {
                // 异步读取输出和错误,避免死锁
                var errorTask = process.StandardError.ReadToEndAsync();
                var outputTask = process.StandardOutput.ReadToEndAsync();
                
                // 等待进程执行完成
                process.WaitForExit();

                // 获取读取结果
                errors = await errorTask;
                results = await outputTask;
            }

            // 打印输出和错误信息
            Console.WriteLine("脚本输出:");
            Console.WriteLine(results);

            if (!string.IsNullOrEmpty(errors))
            {
                Console.WriteLine("\n错误信息:");
                Console.WriteLine(errors);
            }
        }
    }
}

额外注意事项

  • 确保Python解释器路径正确:如果系统PATH中未配置Python,需指定完整路径,比如@"C:\Program Files\Python311\python.exe"。
  • 确保Python脚本与C#编译后的程序在同一目录,或使用正确的相对/绝对路径指向脚本。
  • 若需动态传入参数,可将"Alice Smith"替换为实际变量,比如$"{scriptPath} {firstName} {lastName}"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:15:34