0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

利用python制作C語言在線編譯器的小案例

電子工程師 ? 來源:嵌入式開發(fā)愛好者 ? 作者:嵌入式開發(fā)愛好者 ? 2022-08-08 10:25 ? 次閱讀
大家好,我是牛牛。 今天給大家分享一下利用python制作C語言在線編譯器的小案例,主要包含以下幾部分內(nèi)容:
  • 項(xiàng)目構(gòu)想與準(zhǔn)備

  • 搭建python服務(wù)器

  • 前端頁面

  • 后臺邏輯實(shí)現(xiàn)


一、項(xiàng)目構(gòu)想與準(zhǔn)備

目標(biāo):使用python+codeMirror制作一款類似菜鳥教程的在線編譯器。

1.1項(xiàng)目架構(gòu)

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

1.2 開發(fā)環(huán)境

windows系統(tǒng)

python 3.7.1

mingw-get-setup

1.3技術(shù)棧

bootstrap構(gòu)建前端頁面

codeMirror代碼編輯器插件

flask框架搭建后端服務(wù)器

1.4 環(huán)境準(zhǔn)備

安裝mingw-get-setup,下載地址:

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

安裝成功后安裝gcc,具體操作參考:

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

確保能在windows下運(yùn)行g(shù)cc命令。

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

二、搭建python服務(wù)器

2.1新建項(xiàng)目

使用python自帶的venv新建虛擬環(huán)境。

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

激活虛擬環(huán)境,安裝flask,本項(xiàng)目采用pycharm開發(fā),因此在settings配置項(xiàng)中選擇當(dāng)前目錄下的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

運(yùn)行命令,flask run開啟服務(wù)。

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

訪問:http://127.0.0.1:5000

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

到此,服務(wù)端先告一段落。

三、前端邏輯與代碼實(shí)現(xiàn)

3.1項(xiàng)目中引入bootstrap

在bootstrap官網(wǎng)中下載bootstrap3.4.1,并將代碼包放在項(xiàng)目目錄下。

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

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

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

3.3使用bootstrap構(gòu)建前端頁面

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

3.4添加codeMirror代碼編輯器

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

添加到項(xiàng)目中

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 首頁路由加載頁面

設(shè)置模板文件夾和靜態(tài)資源文件夾,引入render_template,渲染靜態(tài)模板

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

修改頁面靜態(tài)資源路徑

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

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

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

3.6 獲取代碼發(fā)送服務(wù)端

點(diǎn)擊run按鈕獲取代碼

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

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

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

渲染獲取結(jié)果

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

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

四、服務(wù)端處理代碼


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充電站

日常分享熱門、有趣和實(shí)用的編程技術(shù)與編程案例,包括:嵌入式、物聯(lián)網(wǎng)、小程序、python、C/C++、JS、CSS、Nodejs、PHP等。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7606

    瀏覽量

    137051
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1635

    瀏覽量

    49166
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84787

原文標(biāo)題:利用python實(shí)現(xiàn)C語言在線編譯器

文章出處:【微信號:嵌入式開發(fā)愛好者,微信公眾號:嵌入式開發(fā)愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Triton編譯器與GPU編程的結(jié)合應(yīng)用

    Triton編譯器簡介 Triton編譯器是一種針對并行計(jì)算優(yōu)化的編譯器,它能夠自動將高級語言代碼轉(zhuǎn)換為針對特定硬件優(yōu)化的低級代碼。Triton編譯
    的頭像 發(fā)表于 12-25 09:13 ?239次閱讀

    Triton編譯器如何提升編程效率

    在現(xiàn)代軟件開發(fā)中,編譯器扮演著至關(guān)重要的角色。它們不僅將高級語言代碼轉(zhuǎn)換為機(jī)器可執(zhí)行的代碼,還通過各種優(yōu)化技術(shù)提升程序的性能。Triton 編譯器作為一種先進(jìn)的編譯器,通過多種方式提升
    的頭像 發(fā)表于 12-25 09:12 ?229次閱讀

    Triton編譯器的優(yōu)化技巧

    (Instruction Selection) Triton 編譯器在指令選擇階段采用了先進(jìn)的算法來生成針對特定硬件架構(gòu)優(yōu)化的指令。這一階段的目標(biāo)是將高級中間表示(IR)轉(zhuǎn)換為低級機(jī)器代碼,同時盡可能地利用硬件
    的頭像 發(fā)表于 12-25 09:09 ?230次閱讀

    Triton編譯器的常見問題解決方案

    Triton編譯器作為一款專注于深度學(xué)習(xí)的高性能GPU編程工具,在使用過程中可能會遇到一些常見問題。以下是一些常見問題的解決方案: 一、安裝與依賴問題 檢查Python版本 Triton編譯器通常
    的頭像 發(fā)表于 12-24 18:04 ?478次閱讀

    Triton編譯器支持的編程語言

    Triton編譯器支持的編程語言主要包括以下幾種: 一、主要編程語言 Python :Triton編譯器通過
    的頭像 發(fā)表于 12-24 17:33 ?372次閱讀

    Triton編譯器與其他編譯器的比較

    的GPU編程框架,使開發(fā)者能夠編寫出接近手工優(yōu)化的高性能GPU內(nèi)核。 其他編譯器 (如GCC、Clang、MSVC等): 定位:通用編譯器,支持多種編程語言,廣泛應(yīng)用于各種軟件開發(fā)場景。 目標(biāo):提供穩(wěn)定、高效的
    的頭像 發(fā)表于 12-24 17:25 ?380次閱讀

    Triton編譯器功能介紹 Triton編譯器使用教程

    Triton 是一個開源的編譯器前端,它支持多種編程語言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一個可擴(kuò)展和可定制的
    的頭像 發(fā)表于 12-24 17:23 ?428次閱讀

    MSP430優(yōu)化C/C++編譯器v21.6.0.LTS

    電子發(fā)燒友網(wǎng)站提供《MSP430優(yōu)化C/C++編譯器v21.6.0.LTS.pdf》資料免費(fèi)下載
    發(fā)表于 11-08 14:57 ?0次下載
    MSP430優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++<b class='flag-5'>編譯器</b>v21.6.0.LTS

    TMS320C6000優(yōu)化C/C++編譯器v8.3.x

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000優(yōu)化C/C++編譯器v8.3.x.pdf》資料免費(fèi)下載
    發(fā)表于 11-01 09:35 ?0次下載
    TMS320<b class='flag-5'>C</b>6000優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++<b class='flag-5'>編譯器</b>v8.3.x

    C7000優(yōu)化C/C++編譯器

    電子發(fā)燒友網(wǎng)站提供《C7000優(yōu)化C/C++編譯器.pdf》資料免費(fèi)下載
    發(fā)表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++<b class='flag-5'>編譯器</b>

    AI編譯器技術(shù)剖析

    隨著人工智能技術(shù)的飛速發(fā)展,AI編譯器作為一種新興的編譯技術(shù)逐漸進(jìn)入人們的視野。AI編譯器不僅具備傳統(tǒng)編譯器的功能,如將高級語言編寫的源代碼
    的頭像 發(fā)表于 07-17 18:28 ?1661次閱讀

    人工智能編譯器與傳統(tǒng)編譯器的區(qū)別

    人工智能編譯器(AI編譯器)與傳統(tǒng)編譯器在多個方面存在顯著的差異。這些差異主要體現(xiàn)在設(shè)計(jì)目標(biāo)、功能特性、優(yōu)化策略、適用范圍以及技術(shù)復(fù)雜性等方面。以下是對兩者區(qū)別的詳細(xì)探討,旨在全面解析其內(nèi)在差異。
    的頭像 發(fā)表于 07-17 18:19 ?1948次閱讀

    SEGGER編譯器優(yōu)化和安全技術(shù)介紹 支持最新CC++語言

    SEGGER編譯器是專門為ARM和RISC-V微控制設(shè)計(jì)的優(yōu)化C/C++編譯器。它建立在強(qiáng)大的Clang前端上,支持最新的
    的頭像 發(fā)表于 06-04 15:31 ?1486次閱讀
    SEGGER<b class='flag-5'>編譯器</b>優(yōu)化和安全技術(shù)介紹 支持最新<b class='flag-5'>C</b>和<b class='flag-5'>C</b>++<b class='flag-5'>語言</b>

    C語言:嵌入式開發(fā)中的關(guān)鍵編譯器角色

    嵌入式程序開發(fā)跟硬件密切相關(guān),需要使用C語言來讀寫底層寄存、存取數(shù)據(jù)、控制硬件等,C語言和硬件之間由
    發(fā)表于 04-26 14:53 ?648次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>:嵌入式開發(fā)中的關(guān)鍵<b class='flag-5'>編譯器</b>角色

    C語言#define的應(yīng)用

    C/C++ 編程語言中,當(dāng)程序被編譯時,被發(fā)送到編譯器編譯器將程序轉(zhuǎn)換為機(jī)器
    發(fā)表于 03-06 11:29 ?389次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>#define的應(yīng)用