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

ภาพประกอบ: 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

อ่านเพิ่มเติม

ความคิดเห็น

กำลังโหลดความคิดเห็น...