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 应运而生!
安排~
C# 启动 Flask for Python的更多相关文章
- 通过uwsgi+nginx启动flask的python web程序
通过uwsgi+nginx启动flask的python web程序 一般我们启动python web程序的时候都是通过python直接启动主文件,测试的时候是可以的,当访问量大的时候就会出问题pyth ...
- Ubuntu16.04下搭建mysql + uwsgi + nginx环境启动flask 项目
1.安装mysql Sudo apt-get install mysql 配置mysql的数据存储路径,默认在 /var/lib/mysql sudo cp -R /var/lib/mysql/* / ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- 用gunicorn+gevent启动Flask项目
转自:https://blog.csdn.net/dutsoft/article/details/51452598 Flask,webpy,Django都带着 WSGI server,当然性能都不好, ...
- web 部署专题(二):gunicore 并发部署(用gunicorn+gevent启动Flask项目)
转自:https://blog.csdn.net/dutsoft/article/details/51452598 Flask,webpy,Django都带着 WSGI server,当然性能都不好, ...
- Server-side Sessions with Redis | Flask (A Python Microframework)
Server-side Sessions with Redis | Flask (A Python Microframework) Server-side Sessions with Redis By ...
- 【错误记录】uwsgi 启动 flask 出错
在测试环境使用uwsgi启动flask未成功 正常报错信息: *** Starting uWSGI 2.0.13.1 (64bit) on [Fri Sep 23 09:27:47 2016] *** ...
- Flask —— 使用Python和OpenShift进行即时Web开发
最近Packtpub找到了我,让我给他们新出版的关于Flask的书写书评.Flask是一个很流行的Python框架.那本书是Ron DuPlain写的<Flask 即时Web开发>.我决定 ...
- gunicorn启动flask项目的坑
问题描述:项目用的是flask框架,在项目上线的时候,服务器上是使用gunicorn来启动项目的.但是上线之后,发现服务成功启动了,也有正确的返回值,但是没有生成日志,而用python来启动服务的时候 ...
随机推荐
- 传统.NET 4.x应用容器化体验(3)
上一篇我们自己通过编写Dockerfile来编译部署一个ASP.NET MVC应用程序到Windows Container,这一篇我们来试着将.NET 4.x的镜像推送到harbor私有镜像仓库. 1 ...
- 结对开发_石家庄地铁查询web系统
结对开发:队友田昕可 大二上学期做过只有两号线的地铁查询系统,但是只能在控制台操作.这一次将线路加到了六条,并且要求web实现,下面简述一下设计思路和具体代码实现: 1.数据库建表 于我们自己习惯而言 ...
- Python入门学习指南
对于初学者,入门至关重要,这关系到初学者是从入门到精通还是从入门到放弃.以下是结合Python的学习经验,整理出的一条学习路径,主要有四个阶段 NO.1 新手入门阶段,学习基础知识 总体来讲,找一本靠 ...
- [刘阳Java]_什么是EasyUI_第1讲
jQuery EasyUI在Java后台开发中用得还是比较多.当然客观来讲虽然前端技术的发展,很多后台界面设计都植入了前端技术的框架.但是这篇文章我个人觉得也不会妨碍我们对jQuery EasyUI的 ...
- 以初学者的角度理解:SQL实现关系除法
以初学者的角度理解:SQL实现关系除法 相信各位在学习SQL的时候,由于没有一家SQL语言提供除法命令而只能自己写一个.而网上大多就是四步骤加一个模板: select distinct A.X fro ...
- Tbase读写分离与分库分表
一.读写分离 1.1 what 读写分离 读写分离,基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),而从数据库处理SELECT查询操作.数据库复制被用来把事 ...
- 跨域jsonp+jQuery+json+html动态生成表格
1.什么是跨域 浏览器对于javascript的同源策略的限制,例如a.cn下面的js不能调用b.cn中的js,对象或数据(因为a.cn和b.cn是不同域),所以跨域就出现了. 凡是拥有scr这个属性 ...
- GeoServer Rest服务启动匿名认证的配置方法
GeoServer Rest服务数据默认需要进行用户名.密码的认证,如不需进行该认证,则启动匿名认证即可,配置方式如下(针对war包发布的GeoServer应用): 在GeoServer war包的解 ...
- Couchdb 垂直权限绕过漏洞(CVE-2017-12635)
影响版本:小于 1.7.0 以及 小于 2.1.1 首先,发送如下数据包: 修改数据包 { "type": "user", "name": ...
- Java书单-比较全的一篇
本文已收录至码云:https://gitee.com/jalon2015/java-book 前言 之前写过一篇,Java核心书单,里面涵盖了几本主要的Java书籍: 后来有朋友反馈说,这几本太少了, ...