栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

flask 执行 c++程序简单的方法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

flask 执行 c++程序简单的方法

背景:

通过flask服务启动c++程序,网上查到的方案有使用ctypes库对c++代码进行重构,或者通过cmake将算法服务编译为libtest.so。但不想有太麻烦的操作,还想在windows上直接运行,所以想到直接用flask的subprocess来启动命令行执行c++程序。

方法:

先贴上我的代码

@app.route('/ECTSServer', methods=['POST', 'GET'])
def ECTS_run():
    #t = GetSellThread()
    #t.start()
    a = "-d"
    b = "sell1.txt"
    c = "pred.txt"
    s = subprocess.run(["./bin/ects", a, b ,c],stdout=PIPE)
    print(s)
    return s.stdout.decode("utf-8")

1、首先确保flask和要执行的c++可执行文件都在本地可以访问
2、通过subprocess.run创建子进程运行命令行,如果我们想在命令行输入的命令是./bin/ects -d sell1.txt pred.txt。那么就在[ ]里面写这句命令,但方括号里每一个元素都不能包含空格,所以命令行就被拆解成4个部分(如果整体输入会报错)。
3、stdout是c++程序的cout内容,通过subprocess的PIPE进行捕获from subprocess import PIPE,可以通过flask返回给前端。
4、启动flask,发送请求后,可以看到c++程序被运行了

10.37.18.119 - - [23/May/2022 20:01:45] "GET /ECTSServer HTTP/1.1" 200 -
CompletedProcess(args=['./bin/ects', '-d', 'sell1.txt', 'pred.txt'], returncode=0, stdout=b'0rn')

ps:本来想通过cpp-httplib来代替flask框架写c++服务,但是因为cmake的一些依赖问题一直出错,所以只能用这种笨方法代替,因为此处已经通过g++编译好了cpp的可执行文件,我们运行的只是可执行文件(并没有编译过程,如果代码更新还需要离线编译),此方法有什么弊端还需后续发现。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928773.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号