当前位置: 首页 > article >正文

C#通过外部进程调用Python

C#调用Python

C#调用Python有多种方式

  1. Process.Start 启动 Python 脚本
  2. IronPython 集成 Python 脚本
  3. Python.NET(Python for .NET)
  4. HTTP 请求调用 Python Flask/Django Web 服务

个人感觉第一种和第四种方式相对方便一点。

Whisper

Whisper 是由 OpenAI 开发的一种自动语音识别(ASR,Automatic Speech Recognition)系统,能够将语音转换成文字。它支持多种语言,并且具有很高的准确性和鲁棒性。Whisper 不仅能够识别标准的语音输入,还能够处理各种噪声、口音、方言以及多种语言的语音输入。Whisper支持Python,也有对应的库可以直接安装,这里就涉及到用什么方式调用Python了,后面选择了通过第一种方式外部进程调用python,以下是相关代码:
python目录结构:

image

C#相关代码:

using System;
using System.Diagnostics;
using System.IO;

class Program
{
    static void Main()
    {
        // Python 解释器路径
        string scriptPath = "";  
        string shellFileName = "";
        string pythonExecutable = "";
        string arguments = "";
        switch (Environment.OSVersion.Platform)
        {
            case PlatformID.Win32S:
            case PlatformID.Win32Windows:
            case PlatformID.Win32NT:
            case PlatformID.WinCE:
                shellFileName = "cmd.exe";
                pythonExecutable = @"C:\path\to\python.exe"; //  注意区分是使用全局python解释器还是项目环境的python解释器,根据不同情况这里有所不同
                scriptPath = @"C:\path\to\app.py";  // 你的 Python 脚本路径
                arguments = $"/C \"{pythonExecutable} \"{scriptPath}\"\"";  // 直接执行 python 脚本
                break;

            case PlatformID.Unix:
            case PlatformID.MacOSX:
                shellFileName = "bash";
                pythonExecutable = "/path/to/python"; //  注意区分是使用全局python解释器还是项目环境的python解释器,根据不同情况这里有所不同
                scriptPath = @"/path/to/app.py"; // 你的 Python 脚本路径
                arguments = $"-c \"{pythonExecutable} {scriptPath}\"";  // 直接执行 python 脚本
                break;
            default:
                throw new PlatformNotSupportedException();
        }
        ProcessStartInfo start = new ProcessStartInfo
        {
            FileName = shellFileName,
            Arguments = arguments,
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true
        };

        // 启动进程
        using (Process process = Process.Start(start))
        {
            using (StreamReader reader = process.StandardOutput)
            {
                string result = reader.ReadToEnd();
                Console.WriteLine(result);  // 输出 Python 脚本的返回值
            }

            // 如果有错误输出
            using (StreamReader reader = process.StandardError)
            {
                string errorResult = reader.ReadToEnd();
                if (!string.IsNullOrEmpty(errorResult))
                {
                    Console.WriteLine("Error: " + errorResult);
                }
            }
        }
    }
}

通过外部进程调用Python需要注意一个路径的问题,如果Python代码里面使用了相对路径,工作目录会指向到C#程序的而不是Python的代码,这个时候的相对路径会有问题,解决办法,
1、Python不使用相对路径,使用绝对路径
2、在Python代码里面切换工作目录,代码如下:

# 获取当前 Python 脚本所在的目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 将当前工作目录切换到 Python 脚本所在的目录
os.chdir(script_dir)

http://www.kler.cn/a/473160.html

相关文章:

  • IWOA-GRU和GRU时间序列预测(改进的鲸鱼算法优化门控循环单元)
  • Selenium 的四种等待方式及使用场景
  • 【漏洞工具】小米路由器任意文件读取漏洞python图形化框架利用工具(poc|exp)
  • maven如何从外部导包
  • Solidity合约编写(五)
  • 如何 cURL Elasticsearch:进入 Shell
  • 计算机网络之---数据链路层的功能与作用
  • 【C++】字符串处理:从 char[] 到 string
  • 第6章——HTTP首部
  • LabVIEW调用不定长数组 DLL数组
  • 【算法】算法大纲
  • 【C语言】_字符数组与常量字符串
  • 测试开发基础知识2
  • java内存区域 - 栈
  • 如何用Python编程实现自动整理XML发票文件
  • 从零开始:构建一个简单的聊天应用使用 WebSocket 和 React Native
  • Clojure语言的学习路线
  • Erlang语言的函数实现
  • 国内大带宽服务器的应用场景
  • DeepSeek-V3 通俗详解:从诞生到优势,以及与 GPT-4o 的对比
  • 前端VUE首次加载错误类型
  • CSS——24.实战技能网导航栏 hove状态
  • docker搭建atlassian-confluence:7.2.0
  • MySQL学习笔记(二)
  • element-ui中多个表单el-form进行显示/隐藏切换时表单部分校验失效的解决办法
  • 服务器漏洞修复解决方案