C#调用Python脚本的两种实现方式

阿麦
阿麦
发布时间:2026-10-13| 5人浏览过
原创

本文介绍了在C#控制台程序中执行Python脚本的两种主要方法。第一种利用IronPython引擎直接调用,适用于无第三方依赖的简单脚本;第二种通过System.Diagnostics.Process启动Python解释器进程,支持包含第三方模块的复杂场景。文章提供了完整的C#与Python代码示例及注意事项。

C#调用Python脚本概述

由于项目需求,需要在C#控制台程序中执行Python脚本。经过查阅相关资料并实践,成功实现了调用功能,特此记录以便日后查阅。

前置准备:安装IronPython

本文仅演示两种调用方式:第一种适用于Python脚本不依赖第三方模块的场景;第二种则针对包含第三方模块的Python脚本。无论采用哪种方式,前提都是必须安装IronPython。可以通过Visual Studio 2017的工具菜单进入NuGet包管理器,搜索并安装IronPython包;或者从官网下载安装包,安装后手动添加引用即可。

方式一:直接调用(无第三方模块)

方式一:适用于Python脚本中不包含第三方模块的情况。

C#代码实现如下:

C#端代码


using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using System;

namespace CSharpCallPython
{
  class Program
  {
    static void Main(string[] args)
    {
      ScriptEngine pyEngine = Python.CreateEngine();//创建Python解释器对象
      dynamic py = pyEngine.ExecuteFile(@"test.py");//读取脚本文件
      int[] array = new int[9] { 9, 3, 5, 7, 2, 1, 3, 6, 8 };
      string reStr = py.main(array);//调用脚本文件中对应的函数
      Console.WriteLine(reStr);

      Console.ReadKey();
    }
  }
}

对应的Python脚本内容如下:

Python端代码


def main(arr):
  try:
    arr = set(arr)
    arr = sorted(arr)
    arr = arr[0:]
    return str(arr)
  except Exception as err:
    return str(err)

运行结果如图所示:

方式二:进程调用(含第三方模块)

方式二:适用于Python脚本中包含第三方模块的情况。

C#代码实现如下:

C#端代码


using System;
using System.Collections;
using System.Diagnostics;

namespace Test
{
  class Program
  {
    static void Main(string[] args)
    {
      Process p = new Process();
      string path = "reset_ipc.py";//待处理python文件的路径,本例中放在debug文件夹下
      string sArguments = path;
      ArrayList arrayList = new ArrayList();
      arrayList.Add("com4");
      arrayList.Add(57600);
      arrayList.Add("password");
      foreach (var param in arrayList)//添加参数
      {
        sArguments += " " + sigstr;
      }

      p.StartInfo.FileName = @"D:\Python2\python.exe"; //python2.7的安装路径
      p.StartInfo.Arguments = sArguments;//python命令的参数
      p.StartInfo.UseShellExecute = false;
      p.StartInfo.RedirectStandardOutput = true;
      p.StartInfo.RedirectStandardInput = true;
      p.StartInfo.RedirectStandardError = true;
      p.StartInfo.CreateNoWindow = true;
      p.Start();//启动进程

      Console.WriteLine("执行完毕!");

      Console.ReadKey();
    }
  }
}

对应的Python脚本内容如下:

Python端代码


# -*- coding: UTF-8 -*-
import serial
import time

def resetIPC(com, baudrate, password, timeout=0.5):
  ser=serial.Serial(com, baudrate, timeout=timeout)
  flag=True
  try:
    ser.close()
    ser.open()
    ser.write("\n".encode("utf-8"))
    time.sleep(1)
    ser.write("root\n".encode("utf-8"))
    time.sleep(1)
    passwordStr="%s\n" % password
    ser.write(passwordStr.encode("utf-8"))
    time.sleep(1)
    ser.write("killall -9 xxx\n".encode("utf-8"))
    time.sleep(1)
    ser.write("rm /etc/xxx/xxx_user.*\n".encode("utf-8"))
    time.sleep(1)
    ser.write("reboot\n".encode("utf-8"))
    time.sleep(1)
  except Exception:
    flag=False
  finally:
    ser.close()
  return flag

resetIPC(sys.argv[1], sys.argv[2], sys.argv[3])

上述Python脚本的功能是重启IPC设备,经测试该功能已成功实现。

路径处理注意事项

在调用包含第三方模块的Python脚本时,曾尝试使用path.append()方法修改路径,但调试过程中遇到诸多问题,最终放弃该方法,未做深入研究。

以上就是本文的全部内容,希望对读者的学习有所帮助,也欢迎大家继续支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。