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, @"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();
    }
  }
}


圖1

圖2

結構與配置

AnWorker 是腳本網站的代碼,結構如下(看圖1圖2)

  • venv 是虛擬環境,學過Python的都明白
    • /venv/Lib 把Python 3的系統依賴庫(Python\Python37\Lib 此文件夾下 除 site-packages 文件夾)存放在里面,不然啟動不成功
    • /venv/DLLs (不然則會缺少一大堆的模塊在路上)
    • /venv/Scripts 替換掉原有的虛擬環境
  • doc 是存放文檔
  • src 是源碼

結束

闡述下自己的觀點,看官可能會問到干嘛不直接F5,其不是更好,我想說:存在即合理
現在Python應用很廣,任何語言都有可能會使用到腳本開發。
這個時候,C# 調用Python 應運而生!

安排~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM