0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用python制作C语言在线编译器的小案例

电子工程师 来源:嵌入式开发爱好者 作者:嵌入式开发爱好者 2022-08-08 10:25 次阅读
大家好,我是牛牛。 今天给大家分享一下利用python制作C语言在线编译器的小案例,主要包含以下几部分内容:
  • 项目构想与准备

  • 搭建python服务器

  • 前端页面

  • 后台逻辑实现


一、项目构想与准备

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

1.1项目架构

3e9297e0-16c0-11ed-ba43-dac502259ad0.png

1.2 开发环境

windows系统

python 3.7.1

mingw-get-setup

1.3技术栈

bootstrap构建前端页面

codeMirror代码编辑器插件

flask框架搭建后端服务器

1.4 环境准备

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

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

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

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

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

3ea0bffa-16c0-11ed-ba43-dac502259ad0.png

二、搭建python服务器

2.1新建项目

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

3ebe6f50-16c0-11ed-ba43-dac502259ad0.png

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

3ed40c8e-16c0-11ed-ba43-dac502259ad0.png

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

3ef09c8c-16c0-11ed-ba43-dac502259ad0.png

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

3f0d56e2-16c0-11ed-ba43-dac502259ad0.png

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

3f1ee6fa-16c0-11ed-ba43-dac502259ad0.png

访问:http://127.0.0.1:5000

3f3a831a-16c0-11ed-ba43-dac502259ad0.png

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

三、前端逻辑与代码实现

3.1项目中引入bootstrap

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

3f4dfa3a-16c0-11ed-ba43-dac502259ad0.png

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

3f68ef70-16c0-11ed-ba43-dac502259ad0.png

3.3使用bootstrap构建前端页面

3f8af926-16c0-11ed-ba43-dac502259ad0.png

3.4添加codeMirror代码编辑器

下载地址:https://codemirror.net/5/

添加到项目中

3f9f1da2-16c0-11ed-ba43-dac502259ad0.png

页面引入

注意引入的顺序

3fb56800-16c0-11ed-ba43-dac502259ad0.png

3fd601a0-16c0-11ed-ba43-dac502259ad0.png

3fe5289c-16c0-11ed-ba43-dac502259ad0.png

3.5 首页路由加载页面

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

3ff56270-16c0-11ed-ba43-dac502259ad0.png

修改页面静态资源路径

40146558-16c0-11ed-ba43-dac502259ad0.png

403277fa-16c0-11ed-ba43-dac502259ad0.png

4049e00c-16c0-11ed-ba43-dac502259ad0.png

3.6 获取代码发送服务端

点击run按钮获取代码

405c2a78-16c0-11ed-ba43-dac502259ad0.png

406dfabe-16c0-11ed-ba43-dac502259ad0.png

4083c790-16c0-11ed-ba43-dac502259ad0.png

渲染获取结果

4094e4da-16c0-11ed-ba43-dac502259ad0.png

40a84d5e-16c0-11ed-ba43-dac502259ad0.png

四、服务端处理代码


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

40c2d4ee-16c0-11ed-ba43-dac502259ad0.png

代码地址:git@gitee.com:amyliyanice/c-editor-online.git


牛牛IT充电站

日常分享热门、有趣和实用的编程技术与编程案例,包括:嵌入式物联网、小程序、python、C/C++、JS、CSS、Nodejs、PHP等。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7575

    浏览量

    134853
  • 编译器
    +关注

    关注

    1

    文章

    1602

    浏览量

    48926
  • python
    +关注

    关注

    53

    文章

    4754

    浏览量

    84159

原文标题:利用python实现C语言在线编译器

文章出处:【微信号:嵌入式开发爱好者,微信公众号:嵌入式开发爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AI编译器技术剖析

    随着人工智能技术的飞速发展,AI编译器作为一种新兴的编译技术逐渐进入人们的视野。AI编译器不仅具备传统编译器的功能,如将高级语言编写的源代码
    的头像 发表于 07-17 18:28 1264次阅读

    人工智能编译器与传统编译器的区别

    人工智能编译器(AI编译器)与传统编译器在多个方面存在显著的差异。这些差异主要体现在设计目标、功能特性、优化策略、适用范围以及技术复杂性等方面。以下是对两者区别的详细探讨,旨在全面解析其内在差异。
    的头像 发表于 07-17 18:19 1376次阅读

    Meta发布基于Code Llama的LLM编译器

    近日,科技巨头Meta在其X平台上正式宣布推出了一款革命性的LLM编译器,这一模型家族基于Meta Code Llama构建,并融合了先进的代码优化和编译器功能。LLM编译器的推出,标志着Meta在人工智能领域的又一重大突破,将
    的头像 发表于 06-29 17:54 1334次阅读

    SEGGER编译器优化和安全技术介绍 支持最新CC++语言

    SEGGER编译器是专门为ARM和RISC-V微控制设计的优化C/C++编译器。它建立在强大的Clang前端上,支持最新的
    的头像 发表于 06-04 15:31 1210次阅读
    SEGGER<b class='flag-5'>编译器</b>优化和安全技术介绍 支持最新<b class='flag-5'>C</b>和<b class='flag-5'>C</b>++<b class='flag-5'>语言</b>

    C语言:嵌入式开发中的关键编译器角色

    嵌入式程序开发跟硬件密切相关,需要使用C语言来读写底层寄存、存取数据、控制硬件等,C语言和硬件之间由
    发表于 04-26 14:53 439次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>:嵌入式开发中的关键<b class='flag-5'>编译器</b>角色

    C语言#define的应用

    C/C++ 编程语言中,当程序被编译时,被发送到编译器编译器将程序转换为机器
    发表于 03-06 11:29 291次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>#define的应用

    QT开发学习笔记1(安装交叉编译器

    QT安装交叉编译器
    的头像 发表于 02-18 10:02 729次阅读
    QT开发学习笔记1(安装交叉<b class='flag-5'>编译器</b>)

    c语言,c++,java,python区别

    C语言C++、Java和Python是四种常见的编程语言,各有优点和特点。 C
    的头像 发表于 02-05 14:11 1491次阅读

    RX系列V3.06.00的C/C++编译器包数据手册

    电子发烧友网站提供《RX系列V3.06.00的C/C++编译器包数据手册.pdf》资料免费下载
    发表于 01-26 15:57 1次下载
    RX系列V3.06.00的<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++<b class='flag-5'>编译器</b>包数据手册

    RL78系列的C编译器包数据手册

    电子发烧友网站提供《RL78系列的C编译器包数据手册.pdf》资料免费下载
    发表于 01-26 15:55 0次下载
    RL78系列的<b class='flag-5'>C</b><b class='flag-5'>编译器</b>包数据手册

    Triton编译器的原理和性能

    Triton是一种用于编写高效自定义深度学习原语的语言编译器。Triton的目的是提供一个开源环境,以比CUDA更高的生产力编写快速代码,但也比其他现有DSL具有更大的灵活性。Triton已被采用
    的头像 发表于 12-16 11:22 2339次阅读
    Triton<b class='flag-5'>编译器</b>的原理和性能

    为什么C语言要进行编译

    为什么我们编写的C语言要进行编译?什么是编译编译时发生了什么? 机器无法理解我们编写的C
    的头像 发表于 11-24 15:47 1034次阅读
    为什么<b class='flag-5'>C</b><b class='flag-5'>语言</b>要进行<b class='flag-5'>编译</b>

    编译器的优化选项

    一个程序首先要保证正确性,在保证正确性的基础上,性能也是一个重要的考量。要编写高性能的程序,第一,必须选择合适的算法和数据结构;第二,应该编写编译器能够有效优化以转换成高效可执行代码的源代码,要做到
    的头像 发表于 11-24 15:37 774次阅读
    <b class='flag-5'>编译器</b>的优化选项

    新版编译器的设计思路和优化方法

    小程序编译器在小程序开发、预览、发布各个阶段都需要使用,因此编译器性能会直接影响到开发者开发效率,也会影响到开发者工具的使用体验。 由于旧版的编译器(基于 webpack4)在构建大型项目时会很慢,内存占用也高,一直被开发者吐槽
    发表于 10-13 11:21 270次阅读
    新版<b class='flag-5'>编译器</b>的设计思路和优化方法

    嵌入式开发中的C语言编译器设置

    编译器的语义检查很弱小,甚至还会“掩盖”错误。现代的编译器设计是件浩瀚的工程,为了让编译器设计简单一些,目前几乎所有编译器的语义检查都比较弱小。为了获得更快的执行效率,
    发表于 10-11 12:43 597次阅读