欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET Core 3.1 启动 Flask for Python

程序员文章站 2022-06-15 10:30:02
概览 最近有个需求是通过c 代码来启动 python 脚本。嘿~嘿!!! 突发奇想~~既然可以启动 python 脚本,那也能启动 flask,于是开始着手操作。 先看gif图 准备 因为使用的是 来创建的控制台程序,启动flask web程序,所以需要下载 , 如果使用的是 直接运行即可,当前是生 ......

概览

最近有个需求是通过c#代码来启动 python 脚本。嘿~嘿!!!
突发奇想~~既然可以启动 python 脚本,那也能启动 flask,于是开始着手操作。
先看gif图
.NET Core 3.1 启动 Flask for Python

准备

因为使用的是.net core 3.1来创建的控制台程序,启动flask web程序,所以需要下载dotnet-sdk-3.1, 如果使用的是.net framework直接运行即可,当前是生产环境下的启动,如果是开发机,直接使用虚拟环境即可无需配置。
大部分客户机系统安装的都是纯净版本,往往缺少一部分组件,所以我们在纯净的环境下需要准备必备组件:

实现

通过process来启动flask的server.py

cmd
cd desktop
mkdir test
cd test
code .
ctrl + j 
dotnet new console
using system;
using system.diagnostics;
using system.io;
using system.linq;

namespace tes
{
  class program
  {
    private static string _basepath => appdomain.currentdomain.basedirectory;
    private static string _srcpath => path.combine(_basepath, @"anworker\src");
    private static string _venvpath => path.combine(_basepath, @"anworker\venv");
    static void main(string[] args)
    {
      // string filename = path.combine(_venvpath, "scripts", "python.exe");
      // string arguements = path.combine(_srcpath, "server.py");
   
      var workpath = path.combine(_venvpath, "scripts");
      var filename = path.combine(workpath, "python.exe");
      var arguements = path.combine(_srcpath, "server.py");
      console.writeline(filename);
      console.writeline(arguements);

      var psi = new processstartinfo(filename)
      {
        arguments = arguements,
        workingdirectory = _venvpath,
        errordialog = false,
        useshellexecute = false
      };


      var path = psi.environmentvariables["path"];
      if (path != null)
      {
        var arrayt = path.split(new[] { ';' }).where(p => !p.tolower().contains("python")).tolist();
        arrayt.addrange(new[] { _venvpath, path.combine(_venvpath, "lib") });
        psi.environmentvariables["path"] = string.join(";", arrayt);
      }


      process.start(psi);

      console.readline();
    }
  }
}

.NET Core 3.1 启动 Flask for Python图1

.NET Core 3.1 启动 Flask for Python图2

结构与配置

anworker 是脚本网站的代码,结构如下(看图1图2)

  • venv 是虚拟环境,学过python的都明白
    • /venv/lib 把python 3的系统依赖库(python\python37\lib 此文件夹下 除 site-packages 文件夹)存放在里面,不然启动不成功
      .NET Core 3.1 启动 Flask for Python
    • /venv/dlls (不然则会缺少一大堆的模块在路上)
      .NET Core 3.1 启动 Flask for Python
    • /venv/scripts 替换掉原有的虚拟环境
      .NET Core 3.1 启动 Flask for Python
  • doc 是存放文档
  • src 是源码

结束

阐述下自己的观点,看官可能会问到干嘛不直接f5,其不是更好,最后发现没有一点diao用,我想说:存在即合理
现在python应用很广,任何语言都有可能会使用到脚本开发。
这个时候,c# 调用python 应运而生!安排~

demo下载地址:https://github.com/androllen/anworker