GaoAlex123456 2024-03-29 13:59 采纳率: 50%
浏览 13
已结题

C#调用python代码(python带有库)

**使用C#调用python代码,python代码需要调用库

-

  1. 用的第一种(不可行)
using (Py.GIL())
{
    try
    {
        dynamic myModule = Py.Import("PythonApplication1");
        string result = myModule.ShowImg();
    }
    catch (PythonException e)
    {
        Console.WriteLine(e.Message);
    }
}

代码需要对视频处理,虽然能够运行成功但是有时会闪退并且对视频处理速度有较大影响,不稳定

  1. 第二种使用IronPython来进行处理
    代码如下
  • C#代码
 static void Main(string[] args)
        {
            var engine = Python.CreateEngine();
            // 加载脚本文件
            dynamic py = engine.ExecuteFile(@"Python/PythonApplication1.py");
            Console.WriteLine("Use Requests:");
            string resp = py.ShowImg();
            Console.WriteLine(resp);
            Console.ReadKey();
        }
  • python代码
import sys
sys.path.append("C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages")
sys.path.append("C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python37\\lib")
import mmap
import numpy


def ShowImg():
    print(sys.path)

运行后会报错

img

如果不加 import numpy

import sys
sys.path.append("C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages")
sys.path.append("C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python37\\lib")
import mmap


def ShowImg():
    print(sys.path)

可以正常运行

img

使用IronPython如何能正常使用库而不报错

  • 写回答

13条回答 默认 最新

  • 社区专家-Monster-XH 2024-03-29 14:15
    关注

    因为IronPython与CPython,说白了就是Py的解释器,
    底层实现不一样
    numpy等模块是以来API实现的
    IronPython用不了
    C#调用py的numpy,直接在C#中System.Diagnostics.Process类启动Py解释器

    using System;
    using System.Diagnostics;
    
    class Program
    {
        static void Main()
        {
            ProcessStartInfo start = new ProcessStartInfo();
            start.FileName = "python"; // 是py解释器完整路径
            start.Arguments = string.Format("\"{0}\"", @"路径\到\你的\Python脚本.py");
            start.UseShellExecute = false;
            start.RedirectStandardOutput = true;
            using(Process process = Process.Start(start))
            {
                using(StreamReader reader = process.StandardOutput)
                {
                    string result = reader.ReadToEnd();
                    Console.Write(result);
                }
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(12条)

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 创建了问题 3月29日

悬赏问题

  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 如何解决调试dev-出++5.11不成功问题
  • ¥15 安装CentOS6时卡住
  • ¥20 关于#监控系统#的问题,如何解决?(相关搜索:系统软件)
  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。