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 替换掉原有的虚拟环境
- /venv/Lib 把Python 3的系统依赖库(Python\Python37\Lib 此文件夹下 除 site-packages 文件夹)存放在里面,不然启动不成功
- doc 是存放文档
- src 是源码
结束
阐述下自己的观点,看官可能会问到干嘛不直接F5,其不是更好,我想说:存在即合理
现在Python应用很广,任何语言都有可能会使用到脚本开发。
这个时候,C# 调用Python 应运而生!安排~
相关推荐
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
夜斗不是神 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16
坚持是一种品质 2020-11-16
染血白衣 2020-11-16
huavhuahua 2020-11-20
meylovezn 2020-11-20
逍遥友 2020-11-20
weiiron 2020-11-16