zoukankan      html  css  js  c++  java
  • C# 启动 Flask for Python

    概览

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

    准备

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

    实现

    通过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, @"AnWorkersrc");
        private static string _venvPath => Path.Combine(_basePath, @"AnWorkervenv");
        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();
        }
      }
    }
    
    
    

    图1

    图2

    结构与配置

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

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

    结束

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

    安排~

  • 相关阅读:
    Legacy(点对线段有路走,线段向点有路走,线段树走dij)
    G. Death DBMS(查询每个主串和n个模板串匹配后val最大值,支持单点更新)
    2020 CCPC Wannafly Winter Camp Day5 J Xor on Figures(矩阵转01串,统计01串异或种类)
    zoj3988(自己集合和自己集合匹配)
    2020 CCPC Wannafly Winter Camp Day7 A(求任何子序列中相邻范围内数的个数的总和)
    hdu6241(给定树中向上向下限制求最小可能个数)
    hdu6230(求限制条件的回文个数,利用manacher+BIT求解)
    NOIP 2020 游记
    分散层叠算法学习笔记
    代理模式
  • 原文地址:https://www.cnblogs.com/luquanmingren/p/12157479.html
Copyright © 2011-2022 走看看