概覽 最近有個需求是通過c 代碼來啟動 python 腳本。嘿~嘿!!! 突發奇想~~既然可以啟動 python 腳本,那也能啟動 flask,於是開始著手操作。 先看gif圖 準備 因為使用的是 來創建的控制台程式,啟動flask web程式,所以需要下載 , 如果使用的是 直接運行即可,當前是生 ...
概覽
最近有個需求是通過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 替換掉原有的虛擬環境
- /venv/Lib 把Python 3的系統依賴庫(Python\Python37\Lib 此文件夾下 除 site-packages 文件夾)存放在裡面,不然啟動不成功
- doc 是存放文檔
- src 是源碼
結束
闡述下自己的觀點,看官可能會問到幹嘛不直接F5,其不是更好,我想說:存在即合理
現在Python應用很廣,任何語言都有可能會使用到腳本開發。
這個時候,C# 調用Python 應運而生!安排~
Demo下載地址:https://github.com/androllen/AnWorker