python小项目:实现C语言在线编译器

python小项目:实现C语言在线编译器_第1张图片

大家好,我是牛牛。
今天给大家分享一下利用python制作C语言在线编译器的小案例,主要包含以下几部分内容:

1、项目构建与准备

2、搭建python服务器

3、前端页面与逻辑实现

4、服务端代码逻辑实现

一、项目构想与准备

目标:使用python+codeMirror制作一款类似菜鸟教程的在线编译器。

1.1 项目架构

python小项目:实现C语言在线编译器_第2张图片

1.2 开发环境

windows系统

python 3.7.1

virtualenv虚拟环境

mingw-get-setup

1.3 技术栈

Bootstrap3.4.1构建前端页面

codeMirror代码编辑器

flask框架搭建后端服务器

1.4 环境准备

安装mingw-get-setup,下载地址:

https://sourceforge.net/projects/mingw/

安装成功后安装gcc,具体操作参考:

https://www.cnblogs.com/liangliangge/p/14737419.html

确保能在windows下运行gcc命令。

python小项目:实现C语言在线编译器_第3张图片

 二、搭建python服务器

2.1 新建项目

使用python自带的venv新建虚拟环境。

python小项目:实现C语言在线编译器_第4张图片

激活虚拟环境,安装flask,本项目采用pycharm开发,因此在settings配置项中选择当前目录下的venv下的python.exe.

python小项目:实现C语言在线编译器_第5张图片

安装命令:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask

python小项目:实现C语言在线编译器_第6张图片

新建server.py,书写如下代码:

python小项目:实现C语言在线编译器_第7张图片

 运行命令,flask run开启服务。

 访问:http://127.0.0.1:5000

python小项目:实现C语言在线编译器_第8张图片

 到此,服务端先告一段落。

三、前端逻辑与代码实现

3.1 项目中引入bootstrap

在bootstrap官网中下载bootstrap3.4.1,并将代码包放在项目目录下。

python小项目:实现C语言在线编译器_第9张图片

 3.2在pages下新建index.html页面引入bootstrap.

python小项目:实现C语言在线编译器_第10张图片

3.3 使用bootstrap构建前端页面

python小项目:实现C语言在线编译器_第11张图片

3.4添加codeMirror代码编辑器

下载地址:CodeMirror 5

添加到项目中

python小项目:实现C语言在线编译器_第12张图片

页面引入

注意引入的顺序

python小项目:实现C语言在线编译器_第13张图片

python小项目:实现C语言在线编译器_第14张图片

python小项目:实现C语言在线编译器_第15张图片

3.5 首页路由加载页面

设置模板文件夹和静态资源文件夹,引入render_template,渲染静态模板

python小项目:实现C语言在线编译器_第16张图片

修改页面静态资源路径

python小项目:实现C语言在线编译器_第17张图片

python小项目:实现C语言在线编译器_第18张图片

3.6 获取代码发送服务端

点击run按钮获取代码

python小项目:实现C语言在线编译器_第19张图片

python小项目:实现C语言在线编译器_第20张图片

渲染获取结果

python小项目:实现C语言在线编译器_第21张图片

四、服务端处理代码

import subprocess

@app.route("/compiler/",methods=['post'])

def compiler():

    content = request.data

    with open("./test.c",'w',encoding='utf-8') as f:

        f.write(str(content,'utf-8'))

    cmd_order = 'gcc test.c -o test.out && test.out'

    cmd_p = subprocess.Popen(cmd_order, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    cmd_result = ""

    for i in cmd_p.stdout.readlines():

        cmd_result += i.decode()

    return cmd_result

python小项目:实现C语言在线编译器_第22张图片

项目托管:

生成requirements.txt

pip  freeze  >requirements.txt

项目地址:[email protected]:amyliyanice/c-editor-online.git

你可能感兴趣的:(C语言,python,python,c语言,flask)