1. 程式人生 > >.NET Core 3.1 助力 Python Web Server

.NET Core 3.1 助力 Python Web Server

概覽

最近有個需求是通過c#程式碼來啟動python 指令碼。嘿~嘿!!!
突發奇想~~既然可以啟動python指令碼,那也能啟動flask,於是開始著手操作。
先看一波gif圖

通過開啟控制檯啟動flask web程式
首先我們應該準備!

準備

因為使用的是.NET Core 3.1 來建立的控制檯程式,所以需要下載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,其不是更好,最後發現沒有一點diao用,我想說:存在即合理

現在Python應用很廣,任何語言都有可能會使用到指令碼開發。
這個時候,C# 呼叫Python 應運而生!安排~

下載地址:https://github.com/androllen/AnWor