Files
linux-practice/__pycache__/server.cpython-312.pyc

48 lines
7.7 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><><EFBFBD>i<EFBFBD><00><00><><00>dZddlZddlZddlZddlZddlmZe<08>Z ejjejje <0A>d<04>Zd<05>Ze<0F>ZGd<06>dej"j$<00>Zedk(rBd Zed
e<15><00><02>ed <0B>ej"j/d efe<13>j1<00>yy) u<>
Linux 命令沙盒练习平台 Server
- 集成 sandbox.py 沙盒引擎
- 路由:/ → HTML 页面, /api/run → 命令执行, /api/check → 任务检查
<EFBFBD>N)<01> LinuxSandboxzCOURSE_TASKS.jsonc<00><><00> ttdd<02><03>5}tj|<00>cddd<04>S#1swYyxYw#t$r}t d|<01><00><02>dgicYd}~Sd}~wwxYw)u加载课程任务<E4BBBB>r<>utf-8)<01>encodingNzError loading tasks: <20>levels)<06>open<65>
TASKS_FILE<EFBFBD>json<6F>load<61> Exception<6F>print)<02>f<>es <20> server.py<70>
load_tasksrs^<00><00><1E> <11>*<2A>c<EFBFBD>G<EFBFBD> 4<> <20><01><17>9<EFBFBD>9<EFBFBD>Q<EFBFBD><<3C> <20> <20> <20><> <14><1E> <0A>%<25>a<EFBFBD>S<EFBFBD>)<29>*<2A><18>"<22>~<7E><1D><><1E>s/<00>?<00>3<03> ?<00><<07>?<00>?<00> A$<03>A<03>A$<03>A$c<00><<00>eZdZd
d<01>Zd
d<02>Zd<03>Zdededefd<07>Zd<08>Z y ) <0B>LinuxSandboxHandlerc<00><><00>|j|<02>|jdd<02>|j<00>|jj t j |d<03><04>jd<05><00>y)u发送 JSON 响应<E5938D> Content-Typezapplication/json; charset=utf-8F)<01> ensure_asciirN)<08> send_response<73> send_header<65> end_headers<72>wfile<6C>writer <00>dumps<70>encode)<03>self<6C>data<74>statuss r<00> send_jsonzLinuxSandboxHandler.send_json(sU<00><00> <0C><1A><1A>6<EFBFBD>"<22> <0C><18><18><1E>)J<>K<> <0C><18><18><1A> <0C>
<EFBFBD>
<EFBFBD><18><18><14><1A><1A>D<EFBFBD>u<EFBFBD>=<3D>D<>D<>W<EFBFBD>M<>N<>c<00><><00>|j|<02>|jdd<02>|j<00>|jj |j d<03><00>y)u发送纯文本响应rztext/plain; charset=utf-8rN)rrrrrr)r<00>textr!s r<00> send_textzLinuxSandboxHandler.send_text/sH<00><00> <0C><1A><1A>6<EFBFBD>"<22> <0C><18><18><1E>)D<>E<> <0C><18><18><1A> <0C>
<EFBFBD>
<EFBFBD><18><18><14><1B><1B>W<EFBFBD>-<2D>.r#c
<00><><00>tjj|j<00>}|j}|dk(r<>tjj tjj t<00>d<02>} t|d<03>5}|jd<04>|jdd<06>|j<00>|jj|j<00><00>ddd<00>yy|d
k(r}tjj#|j$<00>}|j'd d g<01>d }|s|j)ddid<10>yt*j-|<07>}|j)|<08>y|dk(<00>r<>tjj#|j$<00>}|j'dd g<01>d } | s|j)ddid<10>yd}
t.j'dg<00>D]5} | j'dg<00>D]} | j'd<16>| k(s<01>| }
n|
s<01>5n|
s|j)ddid<18>y|j'dd g<01>d } |j'dd g<01>d }d}|
j'dd<1D>}|
j'dg<00>D])}| j1<00>|j1<00>k(s<01>%d}d }n|sd!|
vr|j3|
d!|<0E>rd}d }|j)| |||
j'd"d#<23>|
j'd$d%<25>d&<26><05>y|d'k(r|j)t.<00>y|jd<18>|jdd<08>|j<00>|jjd(<28>y#1swY<00><02><>xYw#t$ri}|jd<07>|jdd<08>|j<00>|jjd |<05><00>j!<00><00>Yd}~yd}~wwxYw))N<>/z
index.html<6D>rb<72><62>rztext/html; charset=utf-8i<38>z
text/plainzError: z/api/run<75>cmd<6D>r<00>errorzNo command providedi<64>z
/api/check<63>task_idz-task_id requiredr<00>
challenges<EFBFBD>idzTask not foundi<64><00>last_cmd<6D>outputF<74> fail_messageu❌ 未通过测试<E6B58B>solutionTu✅ 回答正确🎉<EFBC81> success_test<73>hintu💡 没有提示<E68F90>titleu 未知任务)r.<00>success<73>messager6r7z
/api/taskss Not Found)<1A>urllib<69>parse<73>urlparse<73>path<74>os<6F>join<69>dirname<6D>__file__r rrrrr<00>readr r<00>parse_qs<71>query<72>getr"<00>SANDBOX<4F>execute<74>TASKS<4B>strip<69> evaluate_test)r<00>parsedr=<00> html_pathrrrDr+<00>resultr.<00>task<73>level<65>t<> current_cmd<6D>current_outputr8r9<00>sols r<00>do_GETzLinuxSandboxHandler.do_GET6s<><00><00><17><1C><1C>&<26>&<26>t<EFBFBD>y<EFBFBD>y<EFBFBD>1<><06><15>{<7B>{<7B><04> <10>3<EFBFBD>;<3B><1A><07><07> <0C> <0C>R<EFBFBD>W<EFBFBD>W<EFBFBD>_<EFBFBD>_<EFBFBD>X<EFBFBD>%><3E> <0C>M<>I<EFBFBD>
9<><19>)<29>T<EFBFBD>*<2A>/<2F>a<EFBFBD><18>&<26>&<26>s<EFBFBD>+<2B><18>$<24>$<24>^<5E>5O<35>P<><18>$<24>$<24>&<26><18>J<EFBFBD>J<EFBFBD>$<24>$<24>Q<EFBFBD>V<EFBFBD>V<EFBFBD>X<EFBFBD>.<2E> /<2F>/<2F><12>Z<EFBFBD> <1F><1A>L<EFBFBD>L<EFBFBD>)<29>)<29>&<26>,<2C>,<2C>7<>E<EFBFBD><17>)<29>)<29>E<EFBFBD>B<EFBFBD>4<EFBFBD>(<28><11>+<2B>C<EFBFBD><16><14><0E><0E><07>)><3E>?<3F><13>E<><16><1D>_<EFBFBD>_<EFBFBD>S<EFBFBD>)<29>F<EFBFBD> <10>N<EFBFBD>N<EFBFBD>6<EFBFBD> "<22><12>\<5C> !<21><1A>L<EFBFBD>L<EFBFBD>)<29>)<29>&<26>,<2C>,<2C>7<>E<EFBFBD><1B>i<EFBFBD>i<EFBFBD> <09>B<EFBFBD>4<EFBFBD>0<><11>3<>G<EFBFBD><1A><14><0E><0E><07>)<<3C>=<3D>s<EFBFBD>C<><16><18>D<EFBFBD><1E><19><19>8<EFBFBD>R<EFBFBD>0<> <1A><05><1E><19><19><<3C><12>4<><1E>A<EFBFBD><18>u<EFBFBD>u<EFBFBD>T<EFBFBD>{<7B>g<EFBFBD>-<2D> <20><04><1D><1E><18><19>  <1A><18><14><0E><0E><07>)9<>:<3A>C<EFBFBD>@<40><16> <20>)<29>)<29>J<EFBFBD><12><04>5<>a<EFBFBD>8<>K<EFBFBD>"<22>Y<EFBFBD>Y<EFBFBD>x<EFBFBD>"<22><14>6<>q<EFBFBD>9<>N<EFBFBD><1C>G<EFBFBD><1A>h<EFBFBD>h<EFBFBD>~<7E>/D<>E<>G<EFBFBD><1C>x<EFBFBD>x<EFBFBD>
<EFBFBD>B<EFBFBD>/<2F> <1A><03><1E>$<24>$<24>&<26>#<23>)<29>)<29>+<2B>5<>"<22>G<EFBFBD>7<>G<EFBFBD><19>  <1A><1B>~<7E><14>5<><17>%<25>%<25>d<EFBFBD>><3E>&:<3A>N<EFBFBD>K<>"<22>G<EFBFBD>7<>G<EFBFBD> <10>N<EFBFBD>N<EFBFBD>"<22>"<22>"<22><1C><08><08><16>)<<3C>=<3D><1D><18><18>'<27>><3E>:<3A> <0E> <0F><12>\<5C> !<21> <10>N<EFBFBD>N<EFBFBD>5<EFBFBD> !<21> <11> <1E> <1E>s<EFBFBD> #<23> <10> <1C> <1C>^<5E>\<5C> :<3A> <10> <1C> <1C> <1E> <10>J<EFBFBD>J<EFBFBD> <1C> <1C>\<5C> *<2A>i/<2F>/<2F><>
<1D> 9<><14>"<22>"<22>3<EFBFBD>'<27><14> <20> <20><1E><1C>><3E><14> <20> <20>"<22><14>
<EFBFBD>
<EFBFBD> <20> <20>7<EFBFBD>1<EFBFBD>#<23><1D>!5<>!5<>!7<>8<>8<><38>  9<>s2<00>= N<00> AM4<03>&N<00>4M><07>9N<00> O3<03>
AO.<03>.O3<03> test_exprr2<00>returnc<00>.<00> d|vr)|jd<02>}t|<03>dk\r |d}||vSyd|vrT|jd<05>}t|<03>dk(r5|dj<00>jd<02>}|j<00>|k(Sy#t$rYywxYw)u#简单评估 success_test 表达式<E8BEBE>contains<6E>'<27><00>z==<3D>F)<04>split<69>lenrIr )rrUr2<00>parts<74>keyword<72>expecteds rrJz!LinuxSandboxHandler.evaluate_test<73>s<><00><00> <19><1A>Y<EFBFBD>&<26>!<21><0F><0F><03>,<2C><05><16>u<EFBFBD>:<3A><11>?<3F>#<23>A<EFBFBD>h<EFBFBD>G<EFBFBD>"<22>f<EFBFBD>,<2C>,<2C> <19> <16><19>"<22>!<21><0F><0F><04>-<2D><05><16>u<EFBFBD>:<3A><11>?<3F>$<24>Q<EFBFBD>x<EFBFBD>~<7E>~<7E>/<2F>5<>5<>c<EFBFBD>:<3A>H<EFBFBD>!<21><<3C><<3C>><3E>X<EFBFBD>5<>5<><18><><18> <19><18> <19>s<00>+B<00>AB<00> B<03>Bc<00><00>y)N<>)r<00>format<61>argss r<00> log_messagezLinuxSandboxHandler.log_message<67>s<00><00> r#N)r*)
<EFBFBD>__name__<5F>
__module__<EFBFBD> __qualname__r"r&rT<00>str<74>boolrJrfrcr#rrr's3<00><00>O<01>/<2F>\+<2B>|<19>s<EFBFBD><19>C<EFBFBD><19>D<EFBFBD><19>& r#r<00>__main__i<5F>uA🌱 Linux Sandbox Practice Server 启动中... http://127.0.0.1:u3📚 地址: https://linux.xiaoxiaoluohao.indevs.inz 127.0.0.1)<19>__doc__<5F> http.server<65>http<74> urllib.parser:r r><00>sandboxrrFr=r?r@rAr
rrH<00>server<65>BaseHTTPRequestHandlerrrg<00>PORTr<00>
HTTPServer<EFBFBD> serve_foreverrcr#r<00><module>rws<><00><01><04> <13><13> <0B> <09>!<21>
<16>.<2E><07>
<10>W<EFBFBD>W<EFBFBD>\<5C>\<5C>"<22>'<27>'<27>/<2F>/<2F>(<28>3<>5H<35> I<>
<EFBFBD><1E> <13> <0C><05>
A <0A>$<24>+<2B>+<2B><<3C><<3C>A <0A>H <0C>z<EFBFBD><19> <0F>D<EFBFBD> <09> M<>d<EFBFBD>V<EFBFBD>
T<EFBFBD>U<> <09>
?<3F>@<40><08>K<EFBFBD>K<EFBFBD><1A><1A>K<EFBFBD><14>.<2E>0C<30>D<>R<>R<>T<> r#