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


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

    1、项目构建与准备

    2、搭建python服务器

    3、前端页面与逻辑实现

    4、服务端代码逻辑实现

    一、项目构想与准备

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

    1.1 项目架构

    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服务器

    2.1 新建项目

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

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

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

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

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

     访问:http://127.0.0.1:5000

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

    三、前端逻辑与代码实现

    3.1 项目中引入bootstrap

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

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

    3.3 使用bootstrap构建前端页面

    3.4添加codeMirror代码编辑器

    下载地址:CodeMirror 5

    添加到项目中

    页面引入

    注意引入的顺序

    3.5 首页路由加载页面

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

    修改页面静态资源路径

    3.6 获取代码发送服务端

    点击run按钮获取代码

    渲染获取结果

    四、服务端处理代码

    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

    项目托管:

    生成requirements.txt

    pip  freeze  >requirements.txt

    项目地址:git@gitee.com:amyliyanice/c-editor-online.git

  • 相关阅读:
    C++ Reference: Standard C++ Library reference: C Library: cmath
    【JVM笔记】堆的核心概述与堆空间大小的设置与查看
    7.使用多线程时,要注意哪些场景?经验之谈
    5G技术在职业教育领域的应用:产生巨变的技术
    新电脑第一次重启后蓝屏
    [云原生.docker安装]Centos7安装docker环境
    ABTest样本量计算
    React类型检测prop-types的基本使用
    Java回调函数是什么?实现的方式有哪些
    【Vue 开发实战】基础篇 # 13:如何优雅地获取跨层级组件实例(拒绝递归)
  • 原文地址:https://blog.csdn.net/amyliyanice/article/details/126218554