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语言
    +关注

    关注

    183

    文章

    7650

    浏览量

    146476
  • 编译器
    +关注

    关注

    1

    文章

    1673

    浏览量

    52106
  • python
    +关注

    关注

    59

    文章

    4892

    浏览量

    90458

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C编译器错误与解决方法

    C语言keil编译器提示错误的解决方法,可以帮你解决程序编译中的烦恼!! C编译器错误与解决方
    发表于 01-22 08:03

    请问如何实现C语言访问MCU寄存

    MCU的寄存。而IAR和CodeVisionAVR编译器对ANSI C进行了扩充,都定义了新的数据类型,是C语言可以直接访问MCU的有关寄
    发表于 12-26 07:00

    在ADS编译器中,用标准的C库函数printf()需要哪些设置呢?

    在ADS编译器中,用标准的C库函数printf()需要哪些设置呢?又在哪儿可以看到printf()输出的信息呢?
    发表于 12-23 07:32

    C语言C++之间的区别是什么

    C++的标准库那样集成度高和功能齐全。 6、编译器语言特性: C++编译器通常比C
    发表于 12-11 06:23

    单片机开发功能安全中编译器

    的问题是,防御性编码和外部数据访问等实践并不属于编译器认可的领域。例如,CC ++都没有为内存损坏留出任何余地,因此,除非在没有这种损坏的情况下可以访问旨在防止内存损坏的代码,否则在对代码进行优化
    发表于 12-01 06:44

    开源鸿蒙技术大会2025丨编译器与编程语言分论坛:语言驱动系统创新,编译赋能生态繁荣

    在万物智联的时代背景下,操作系统底层能力的构建离不开编程语言编译器的关键支撑。作为开源鸿蒙生态的核心技术,语言设计与编译器、虚拟机实现的进步直接关系到开发效率、运行性能与系统安全。本
    的头像 发表于 11-20 17:24 1291次阅读
    开源鸿蒙技术大会2025丨<b class='flag-5'>编译器</b>与编程<b class='flag-5'>语言</b>分论坛:<b class='flag-5'>语言</b>驱动系统创新,<b class='flag-5'>编译</b>赋能生态繁荣

    C语言和单片机C语言有什么差异

    成汇编语言机器才能读懂,所以每个平台的编译器编译成对应平台汇编的程序,每个平台的汇编不一样,当然编译器也不一样。 DOS上的TC2 TC3 WINDOWS上的VC 8051的
    发表于 11-14 07:55

    飞凌嵌入式ElfBoard-Vim编辑之GCC编译器的安装

    GCC(GNU Compiler Collection)是由GNU开发的编程语言编译器,最初是作为GNU操作系统的编译器编写的。GCC是一个编译器套件,包含很多软件包,支持多种
    发表于 10-15 08:44

    GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译呢?

    GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译?有什么编译选项可以设置吗? 移植代码,有些函数没被调用的函数想留在代码里,但不想被编译
    发表于 09-28 12:25

    如何在Keil中将NuMicro BSP从Arm编译器5迁移到编译器6?

    在Keil中将NuMicro BSP从Arm编译器5迁移到编译器6!
    发表于 08-20 06:29

    C++ 与 Python:树莓派上哪种语言更优?

    Python是树莓派上的首选编程语言,我们的大部分教程都使用它。然而,C++在物联网项目中同样广受欢迎且功能强大。那么,在树莓派项目中选择哪种语言更合适呢?
    的头像 发表于 07-24 15:32 1232次阅读
    <b class='flag-5'>C</b>++ 与 <b class='flag-5'>Python</b>:树莓派上哪种<b class='flag-5'>语言</b>更优?

    进迭时空同构融合RISC-V AI CPU的Triton算子编译器实践

    Triton是由OpenAI开发的一个开源编程语言编译器,旨在简化高性能GPU内核的编写。它提供了类似Python的语法,并通过高级抽象降低了GPU编程的复杂性,同时保持了高性能。目前
    的头像 发表于 07-15 09:04 2367次阅读
    进迭时空同构融合RISC-V AI CPU的Triton算子<b class='flag-5'>编译器</b>实践

    边缘设备AI部署:编译器如何实现轻量化与高性能?

    电子发烧友网综合报道 AI编译器是专门为人工智能(AI)和机器学习(ML)模型设计的编译器,其核心目标是将高级的AI模型描述(如计算图、神经网络结构)转换为特定硬件平台(如CPU、GPU、FPGA
    的头像 发表于 07-06 05:49 7063次阅读

    编译器功能安全验证的关键要素

    在汽车、工业、医疗等安全关键型应用中,确保功能安全合规性需要严格的工具链验证。开发安全关键型软件的企业必须遵守ISO 26262、IEC 61508、ISO 62304等国际标准对编译器工具链进行全面的验证。
    的头像 发表于 07-05 13:37 1768次阅读

    兆松科技ZCC编译器全面支持芯来科技NA系列处理

    近日,兆松科技(武汉)有限公司(以下简称“兆松科技”)宣布正式发布高性能RISC-V编译器ZCC 4.0.0版本。
    的头像 发表于 06-11 09:56 2109次阅读