Tool: python_exec — รัน Python เต็มรูปแบบด้วย interpreter เดียวกับตัว server เอง

python_exec คือทางเลือกเมื่องานต้องการมากกว่า shell command — คำนวณสถิติ, วิเคราะห์ตาราง, regression, machine learning ซึ่งเขียนเป็นคำสั่ง bash เดี่ยวๆ ไม่สะดวก
รันด้วย interpreter เดียวกับตัว server เอง
จุดสำคัญที่ docstring บอกตรงๆ: โค้ดรันด้วย interpreter Python ตัวเดียวกับที่รัน server.py เอง ไม่ใช่ subprocess แยกต่างหากที่ spawn ใหม่ทุกครั้ง หมายความว่า library ที่ import ได้คือชุดที่ติดตั้งไว้ตอน install_library/install.sh เท่านั้น: pandas, numpy, matplotlib, scipy, scikit-learn, statsmodels — ไม่ใช่ sandbox ที่ pip install อะไรเพิ่มได้ตามต้องการ
Sandbox การเขียนไฟล์ใช้ sandbox-exec policy เดียวกับ bash เป๊ะๆ — protected/system paths ถูก deny, workspace กับ /tmp ถูก allow เพิ่มท้าย profile และการลบไฟล์ใน workspace ถูกปิดไว้ จึงเป็น deny-list ที่มี explicit safe scopes ไม่ใช่ allow-list ที่ครอบคลุมทุก path
ความสามารถหลัก 4 กลุ่ม
จาก docstring จริงในซอร์สโค้ด:
- Data analysis:
pandas— อ่าน CSV/Excel/JSON, filter/groupby/aggregate,.describe()/.corr() - Statistics:
scipy.stats— hypothesis test (ttest_ind,pearsonr,chi2_contingency, ANOVA) - Regression / time-series:
statsmodels.api—sm.OLS(y, sm.add_constant(x)).fit().summary(), ARIMA - Machine learning:
sklearn— regression, clustering, PCA,train_test_split
บวกกับ file I/O ในขอบเขต workspace (อ่านไฟล์ที่ tool ก่อนหน้าบันทึกไว้, เขียน CSV/txt ที่ประมวลผลแล้ว) และ matplotlib แบบ headless (matplotlib.use('Agg') ก่อน import pyplot แล้ว plt.savefig(...) — ไม่มีการแสดงผลจริงในเครื่อง sandbox subprocess นี้)
เห็นได้แค่สิ่งที่ print() ออกมา
ข้อจำกัดที่สำคัญที่สุด: มีแค่ stdout (print(...)) เท่านั้นที่ถูกส่งกลับ ค่าที่คำนวณแล้วแต่ไม่เคย print ออกมาจะ “มองไม่เห็น” และแสดงเป็น (no output) — เขียนโค้ดวิเคราะห์แล้วลืม print ผลลัพธ์สุดท้ายคือสาเหตุความผิดพลาดที่พบบ่อยที่สุดของ tool นี้
Output cap ไม่กระทบตัวเลขที่คำนวณจริง — กระทบแค่สิ่งที่พิมพ์
max_chars (default 10,000) ตัดเฉพาะข้อความที่พิมพ์ออกมา ที่ตำแหน่งบรรทัดสมบูรณ์บรรทัดสุดท้าย แล้วบันทึกฉบับเต็มลงไฟล์ในเวิร์กสเปซพร้อม marker [python_exec] truncated: ... บอก path — แต่ docstring เน้นย้ำจุดที่คนมักเข้าใจผิด:
Any aggregate you already computed (df.sum(), df.groupby(…).mean(), .describe(), etc.) ran on the complete in-memory data regardless of the cap — those numbers are NOT samples.
พูดอีกแบบ: ถ้าคำนวณ df.groupby('region').sum() บน DataFrame เต็มแล้ว print เฉพาะ 5 แถวแรก ตัวเลขที่ print มานั้นถูกคำนวณจากข้อมูลครบ 100% ไม่ใช่แค่ตัวอย่างที่ถูกตัดโดน cap — การตัดเกิดขึ้นแค่ตอนพิมพ์ผลลัพธ์เท่านั้น ไม่ใช่ตอนคำนวณ
Error hint ตาม pattern จริงของ error ที่พบบ่อย
เมื่อ error หนึ่งใน ModuleNotFoundError, FileNotFoundError, KeyError, UnicodeDecodeError, SyntaxError เกิดขึ้น server แนบบรรทัด [hint] สั้นๆ ให้ก่อนจะลองใหม่ — บาง hint มีมากกว่าหนึ่งทางเลือก ถ้าทางแรกไม่ได้ผลให้ลองทางถัดไปก่อนเลิก crash ที่ไม่มี stdout เลยคืน [error] exited <code>, no output ส่วน traceback ปกติจะขึ้นใต้หัว [stderr]
ทำไมเรื่องนี้ถึงสำคัญ
bash เหมาะกับงานระบบ แต่ไม่เหมาะกับ “คำนวณเลขให้หน่อย” หรือ “หา correlation ระหว่างสองคอลัมน์” — python_exec เติมช่องว่างนั้นด้วย library วิเคราะห์ข้อมูลระดับ production จริง โดยยังอยู่ใต้ sandbox เดียวกับ bash ทุกประการ ไม่ได้เปิดสิทธิ์เพิ่มแค่เพราะเป็น Python แทน shell
ความคิดเห็น
กำลังโหลดความคิดเห็น...