今天想在樹莓派上本身搭一個在線的python IDE,因而找到了一篇教程--Fred913大神的從頭開始製做OJ-在線IDE的搭建
本身嘗試動手作了一下, 仍是發現很多細節須要注意, 記錄在此
若是不知道怎麼用樹莓派搭建網站的能夠參考我以前的文章: 樹莓派4B踩坑指南 - (11)免費搭建網站(寶塔,花生殼)
demo地址: http://bowen.51mypc.cn/editor/javascript
api
, 注意這裏須要sudo或者su權限(下同), 而後使用mkdir api
來建立touch python.php
# 在api
中新建文件python.php
,nano python.php
# 在文件中粘貼如下內容<?php //Powered By ShengFAN //使用世界上最好的語言PHP進行開發-_- $randint = rand();//爲用戶的代碼取一個隨機數做爲惟一碼 $f = fopen("/tmp/usrcode".$randint.".py", "w"); fwrite($f,$_GET['code']); fclose($f); echo str_replace("\n","<br>",passthru("python3 /tmp/usrcode".$randint.".py 2>&1")); //把換行轉爲html格式 unlink("/tmp/usrcode".$randint.".py"); //刪除用戶代碼,以避免形成tmp目錄擁擠
mkdir editor
download zip
, 而後把ace-builds-master.zip
隨便解壓到哪一個地方, 而後把ace-builds-master
裏邊全部的東西複製到editor
文件夾, 如cp -r /home/pi/Desktop/n/ace-builds-master/* /www/wwwroot/bowen.51mypc.cn/editor/
, 命令中的 -r
和 /*
不要漏了. 複製完確認一下應該有這樣的一個目錄:/editor/src
index.php
, touch index.php
(這裏跟原文有出入, 下載的包裏沒有index.html)index.php
中放入以下代碼(這裏跟原文有出入, 原文寫的是做者本身的網址, 這裏刪掉了php和html的選項並將python.php的地址改爲了相對路徑):<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="en"> <head> <meta charset="UTF-8"> <title>FredTools IDE</title> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <script> function runcode(code,type) { if(type == "python") { console.log(code); var xmlhttp; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行代碼 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 瀏覽器執行代碼 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","../api/python.php?code=" + escape(code),false); xmlhttp.send(); var data = xmlhttp.responseText; $("#output").html("<pre class=\"fillall\">" + data.replace(/</g,"<").replace(/>/g,">").replace(/\n/g,"<br>") + "</pre>"); } } </script> <style type="text/css" media="screen"> #editor { margin: 0; position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .container { margin: 0; //position: absolute; top: 0; bottom: 0; } #editordiv { margin: 0; position: absolute; top: 0; bottom: 0; left:0; right:58.33333333333334%; } #iframediv { margin: 0; position: absolute; top: 0; bottom: 50%; left: 41.66666666666667%; right:16.66666666666667%; } #stepdiv { margin: 0; position: absolute; top: 50%; bottom: 0; left: 41.66666666666667%; right:16.66666666666667%; } .col-md-2 { margin: 0; position: absolute; top: 0; bottom: 0; left: 83.33333333333334%; right:0; } </style> </head> <body> <div class="container"> <div class="col-md-5 column" id="editordiv"> <pre id="editor"></pre> </div> <div class="col-md-5 column" id="iframediv"> <h3>運行結果:</h3> <div id="output"></div> </div> <div class="col-md-5 column" id="stepdiv"> <h3 id="stepcount">自由模式</h3> <p id="steptext">在此模式下,你能夠自由的使用FredTools IDE。</p> <p id="task">任務:無</p> </div> <div class="col-md-2 column"> <!-- 更改語言-start --> <div class="form-group"> <select name="language" id="language" class="form-control"> <option value="python" selected>Python(.py)</option> </select> <button id="changelang" class="btn btn-default"> 更改語言 </button> </div> <!-- 更改語言-end --> <br> <!-- 更改皮膚-end --> <div class="form-group"> <select name="skin" id="skin" class="form-control"> <?php require "../skin.html"; ?> </select> <button id="changeskin" class="btn btn-default"> 更改皮膚 </button> </div> <!-- 更改語言-end --> <button class="btn btn-default" id="cheak"> <span class="glyphicon glyphicon-play-circle"></span>運行代碼 </button> <br><br> <div class="form-group"> <input type="text" id="filename" placeholder="請輸入此文件文件名......" class="form-control"> <button class="btn btn-default" id="savecode"> <span class="glyphicon glyphicon-save"></span>保存代碼(經過Cookie) </button> <button class="btn btn-default" id="readcode"> <span class="glyphicon glyphicon-open"></span>讀入代碼(經過Cookie) </button> </div> </div> </div> <script src="src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script> <script> var editor = ace.edit("editor"); editor.setOptions({enableLiveAutocompletion: true}); editor.setTheme("ace/theme/Chrome"); editor.session.setMode("ace/mode/python"); $("#changelang").click(function(){ editor.session.setMode("ace/mode/" + $("#language").val()); }); $("#changeskin").click(function(){ editor.setTheme("ace/theme/" + $("#skin").val()); }); $("#cheak").click(function(){ var result = runcode(editor.getValue(), $("#language").val()); }); $("#savecode").click(function(){ $.cookie("File-" + $("#filename").val(), editor.getValue()); }); $("#readcode").click(function(){ editor.setValue($.cookie("File-" + $("#filename").val())); }); </script> </body> </html>
bowen.51mypc.cn/editor
, 而後就悲劇了:<?php require "../skin.html"; ?>
哦, 原來沒有這個文件因此卡這了, 那就回去新建一個吧nano skin.html
, 寫入一行<option value='chrome'>Chrome</option>
, 保存退出. (這裏跟原文有出入, 由於實際上並無皮膚能夠換, 就把其餘的刪掉了...)php.ini
中的passthru函數
被禁用了, 本想去找這個ini文件, 後來想一想這種東西估計寶塔面板裏就有,就去找了一下, 還真找到了: print("hello world")
EOFError: EOF when reading a line
), 估計是交互性無法知足, 但願後續能補上這個不足吧!