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

代码地址:[email protected]:amyliyanice/c-editor-online.git


牛牛IT充电站

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

审核编辑 :李倩


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

    关注

    181

    文章

    7633

    浏览量

    142792
  • 编译器
    +关注

    关注

    1

    文章

    1664

    浏览量

    50541
  • python
    +关注

    关注

    56

    文章

    4838

    浏览量

    87977

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Triton编译器与GPU编程的结合应用

    Triton编译器简介 Triton编译器是一种针对并行计算优化的编译器,它能够自动将高级语言代码转换为针对特定硬件优化的低级代码。Triton编译
    的头像 发表于 12-25 09:13 1024次阅读

    Triton编译器如何提升编程效率

    在现代软件开发中,编译器扮演着至关重要的角色。它们不仅将高级语言代码转换为机器可执行的代码,还通过各种优化技术提升程序的性能。Triton 编译器作为一种先进的编译器,通过多种方式提升
    的头像 发表于 12-25 09:12 898次阅读

    Triton编译器在高性能计算中的应用

    先进的编译技术,为高性能计算提供了强大的支持。 Triton编译器简介 Triton编译器是一种开源的编译器框架,旨在为异构计算环境提供高效的编译
    的头像 发表于 12-25 09:11 1153次阅读

    Triton编译器的优化技巧

    (Instruction Selection) Triton 编译器在指令选择阶段采用了先进的算法来生成针对特定硬件架构优化的指令。这一阶段的目标是将高级中间表示(IR)转换为低级机器代码,同时尽可能地利用硬件
    的头像 发表于 12-25 09:09 1263次阅读

    Triton编译器在机器学习中的应用

    1. Triton编译器概述 Triton编译器是NVIDIA Triton推理服务平台的一部分,它负责将深度学习模型转换为优化的格式,以便在NVIDIA GPU上高效运行。Triton编译器支持
    的头像 发表于 12-24 18:13 1231次阅读

    Triton编译器的常见问题解决方案

    Triton编译器作为一款专注于深度学习的高性能GPU编程工具,在使用过程中可能会遇到一些常见问题。以下是一些常见问题的解决方案: 一、安装与依赖问题 检查Python版本 Triton编译器通常
    的头像 发表于 12-24 18:04 3717次阅读

    Triton编译器支持的编程语言

    Triton编译器支持的编程语言主要包括以下几种: 一、主要编程语言 Python :Triton编译器通过
    的头像 发表于 12-24 17:33 1142次阅读

    Triton编译器与其他编译器的比较

    的GPU编程框架,使开发者能够编写出接近手工优化的高性能GPU内核。 其他编译器 (如GCC、Clang、MSVC等): 定位:通用编译器,支持多种编程语言,广泛应用于各种软件开发场景。 目标:提供稳定、高效的
    的头像 发表于 12-24 17:25 1190次阅读

    Triton编译器功能介绍 Triton编译器使用教程

    Triton 是一个开源的编译器前端,它支持多种编程语言,包括 CC++、Fortran 和 Ada。Triton 旨在提供一个可扩展和可定制的
    的头像 发表于 12-24 17:23 2023次阅读

    HighTec C/C++编译器支持Andes晶心科技RISC-V IP

    汽车编译器解决方案领先供货商HighTec EDV-Systeme GmbH宣布其针对汽车市场的高度优化C/C++编译器支持Andes晶心科技的RISC-V IP。这项支持对汽车软件开
    的头像 发表于 12-12 16:26 1274次阅读

    MSP430优化C/C++编译器v21.6.0.LTS

    电子发烧友网站提供《MSP430优化C/C++编译器v21.6.0.LTS.pdf》资料免费下载
    发表于 11-08 14:57 0次下载
    MSP430优化<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++<b class='flag-5'>编译器</b>v21.6.0.LTS

    ARM优化C/C++编译器 v20.2.0.LTS

    电子发烧友网站提供《ARM优化C/C++编译器 v20.2.0.LTS.pdf》资料免费下载
    发表于 11-07 10:46 0次下载
    ARM优化<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++<b class='flag-5'>编译器</b> v20.2.0.LTS

    TMS320C6000优化C/C++编译器v8.3.x

    电子发烧友网站提供《TMS320C6000优化C/C++编译器v8.3.x.pdf》资料免费下载
    发表于 11-01 09:35 1次下载
    TMS320<b class='flag-5'>C</b>6000优化<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++<b class='flag-5'>编译器</b>v8.3.x

    TMS320C28x优化C/C++编译器v22.6.0.LTS

    电子发烧友网站提供《TMS320C28x优化C/C++编译器v22.6.0.LTS.pdf》资料免费下载
    发表于 10-31 10:10 0次下载
    TMS320<b class='flag-5'>C</b>28x优化<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++<b class='flag-5'>编译器</b>v22.6.0.LTS

    C7000优化C/C++编译器

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    <b class='flag-5'>C</b>7000优化<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++<b class='flag-5'>编译器</b>