C#调用Python脚本的5种方法及代码实现

花开有时
花开有时
发布时间:2026-10-15 | 5人浏览过
原创

本文总结了在C#中调用Python脚本的五种常见方法。针对不同的项目需求(如是否依赖第三方库、对执行效率的要求等),开发者可以选择最适合的方案:从轻量级的IronPython嵌入到基于进程管理的标准命令行调用,再到打包成可执行文件的部署方式。

C#调用Python脚本的方法详解

在工程开发中,常需要将Python编写的机器学习或深度学习算法集成到C#架构的应用程序中。以下是五种典型的跨语言调用方案:

第1步:使用IronPython(仅适用于无第三方模块)

核心逻辑:通过NuGet安装 IronPython 包,直接在C#进程中创建Python解释器实例并执行脚本。
适用条件:仅限Python原生标准库。任何依赖NumPy、Pandas等C扩展的第三方模块均无法工作。
操作步骤:

  1. 在项目中添加 IronPython 引用。
  2. 调用 Python.CreateEngine() 创建引擎。
  3. 使用 ExecuteFile 加载本地 .py 文件。
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

static void Main(string[] args)
{
    // 1. 创建解释器
    ScriptEngine pyEngine = Python.CreateEngine();
    
    // 2. 读取脚本(确保路径正确)
    dynamic py = pyEngine.ExecuteFile(@"test.py");
    
    // 3. 传入参数并执行函数
    int[] array = new int[] { 9, 3, 5, 7, 2, 1, 3, 6, 8 };
    string reStr = py.main(array);
    Console.WriteLine(reStr);
}

第2步:利用Process调用独立脚本环境(通用性强)

核心逻辑:通过操作系统启动Python解释器进程执行脚本,适合需要完整Python环境的场景。

using System.Diagnostics;

Process p = new Process();
p.StartInfo.FileName = @"D:\Python\python.exe"; // 绝对路径或配置环境变量后的 'python.exe'
p.StartInfo.Arguments = "script.py arg1 arg2";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;

p.Start();
p.WaitForExit();

第3步:C++混合编程(复杂度高,不推荐日常使用)

将Python脚本结合C++封装为动态链接库(DLL)。该方法受限于Python版本(32/64位一致性)、VS编译环境与系统依赖,实现极为繁琐且容易报错,仅在特殊底层交互时有参考意义。

第4步:直接命令行执行(推荐使用)

优点:兼容所有依赖库(支持Anaconda、虚拟环境),执行效率高,仅需简单的进程管理。
缺点:目标机器需提前配置好Python运行环境。

操作指南:

  1. 编写Python主程序:main.py 需接收命令行参数。

import sys
import numpy as np

def func(a, b):
    # 模拟业务逻辑
    return float(a) * float(b)

if __name__ == '__main__':
    result = func(sys.argv[1], sys.argv[2])
    print(result)
  1. C#调用代码实现:
public static void RunPythonScript(string scriptPath, params string[] arguments)
{
    Process p = new Process();
    
    // 设置解释器路径(若配了环境变量可简化为 python.exe)
    p.StartInfo.FileName = @"D:\Python\envs\python3\python.exe"; 
    
    // 拼接参数: script.py -u arg1 arg2
    string args = scriptPath + " -u";
    foreach (string arg in arguments) {
        args += " " + arg;
    }
    p.StartInfo.Arguments = args;
    
    // 捕获输出流
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.CreateNoWindow = true;
    
    p.OutputDataReceived += (sender, e) => {
        if (!string.IsNullOrEmpty(e.Data))
            Console.WriteLine(e.Data); // 处理实时输出
    };

    p.Start();
    p.BeginOutputReadLine();
    p.WaitForExit();
}

第5步:调用打包后的Exe(适用于离线环境)

核心逻辑:利用 pyinstaller 将含依赖的Python脚本打包成单文件exe,C#只需调用该exe。虽然免去了部署环境的工作,但解压和运行过程较慢,不适合高频调用。

步骤概要:

  1. 在终端执行 pyinstaller -F main.py。
  2. C#中通过 Process.Start 调用生成的 dist/main.exe 及其命令行参数。

以上就是C#调用Python脚本的详细内容,更多关于跨语言编程与数据交换的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表