−25%

Windows รายปี ถึง 31 ต.ค. ดูแพ็กเกจ

EQVPS
เริ่มต้นใช้งาน

คู่มืออ้างอิง Sandbox API: SDK สำหรับ Python และ TypeScript

ทุกเมธอดของ EQVPS sandbox SDK ในหน้าเดียว: พารามิเตอร์ ค่าเริ่มต้น ค่าที่ส่งกลับ และคลาสข้อผิดพลาดครบทั้ง 11 คลาส พร้อมตัวอย่างเดียวกันทั้ง Python และ TypeScript

ตรวจสอบล่าสุด: 2026-10-10 · SDK 0.2.0 (PyPI eqvps, npm @eqvps/sdk)

SDK เป็นตัวห่อบาง ๆ ครอบ REST API ของ sandbox ช่วยให้คุณไม่ต้องทำสามอย่าง: สร้างคำขอด้วยมือ ลองใหม่เมื่อแพลตฟอร์มไม่ว่าง และลืมลบ sandbox เมื่อโค้ดโยน exception ทุกอย่างในหน้านี้ตรงกับเวอร์ชัน 0.2.0 ของทั้งสองแพ็กเกจ

ถ้าคุณยังไม่เคยสร้าง sandbox คู่มือเชื่อมต่อ 5 นาที จะช่วยให้คุณได้โทเค็นก่อน ส่วน sandbox คืออะไรและข้างในมีอะไร อธิบายไว้ใน แซนด์บ็อกซ์

ติดตั้งและตั้งค่า

pip install eqvps          # Python 3.8+
npm i @eqvps/sdk           # Node.js 18+, Deno, Bun
export EQVPS_API_KEY=...   # your EQVPS account token

โปรแกรมเดียวกันในทั้งสองภาษา: สร้าง sandbox รันโค้ด แล้วลบทิ้ง

from eqvps import Sandbox

with Sandbox.create(tariff="small") as sb:
    r = sb.run("print(2 + 2)")
    print(r.exit_code, r.stdout)   # 0 4
import { Sandbox } from "@eqvps/sdk";

await Sandbox.with({ tariff: "small" }, async (sb) => {
  const r = await sb.run("print(2 + 2)");
  console.log(r.exit_code, r.stdout); // 0 4
});

การสร้างและค้นหา sandbox

Sandbox.create(...) เริ่ม sandbox ใหม่ ปกติใช้เวลาประมาณหนึ่งวินาที Python รับอาร์กิวเมนต์แบบระบุชื่อ ส่วน TypeScript รับออบเจ็กต์ตัวเลือกหนึ่งตัว

PythonTypeScriptค่าเริ่มต้นความหมาย
modemode"ephemeral""ephemeral" (คิดรายวินาที) หรือ "persistent" (คิดตามชั่วโมงที่เริ่ม เก็บดิสก์ไว้)
tarifftariff"small"micro, small, standard, plus, pro, max
idle_timeoutidleTimeout300จำนวนวินาทีที่ไม่มีกิจกรรมก่อน sandbox ชั่วคราวจะถูกลบ สูงสุด 3600
ttlttl—อายุสูงสุดเป็นวินาที: ชั่วคราวไม่เกิน 86400 ถาวรไม่เกิน 2592000
envenv—ตัวแปรสภาพแวดล้อมสำหรับทุกคำสั่ง จัดเก็บแบบเข้ารหัส
api_key, base_urlapiKey, baseUrlตัวแปรสภาพแวดล้อมใช้แทน EQVPS_API_KEY / EQVPS_API_URL
timeouttimeoutMs70 วินาทีHTTP timeout ต่อคำขอ
max_retriesmaxRetries3จำนวนครั้งที่ลองใหม่เมื่อได้ 429/503

Sandbox.connect(id) เชื่อมต่อกับ sandbox ที่มีอยู่แล้ว โดยมากเป็น sandbox ถาวรที่คุณสร้างไว้เมื่อวาน Sandbox.list() ส่งคืน sandbox ทั้งหมดในบัญชี ทั้งที่กำลังรันและที่หยุดชั่วคราว

พร็อพเพอร์ตี: id (sb_ + อักขระฐานสิบหก 24 ตัว), mode, tariff, state (running, starting, paused, pausing, resuming, deleting, deleted), env_keys / envKeys (เฉพาะชื่อ ค่าจะไม่ถูกส่งกลับเด็ดขาด) และ info (ออบเจ็กต์ดิบ) ส่วน refresh() จะโหลดค่าเหล่านี้ใหม่

kill() ลบ sandbox และหยุดการคิดเงิน การเรียกกับ sandbox ที่ถูกลบไปแล้วไม่ถือเป็นข้อผิดพลาด

การรันโค้ด

run(code, language="python", timeout=30) ส่งโค้ดทาง stdin ไปให้ Python 3.12, Node.js 22 หรือ bash ("python", "node", "bash") exec(command, cwd=None, stdin=None, timeout=30) รันคำสั่ง shell: สตริงจะผ่าน bash -lc ส่วนลิสต์จะถูกรันเป็น argv โดยไม่ผ่าน shell

ทั้งสองส่งคืน ExecResult:

ฟิลด์ความหมาย
exit_codeexit code ของโปรเซส
stdout, stderrเอาต์พุต สูงสุด 1 MiB ต่อสตรีม
timed_outคำสั่งรันจนถึง timeout
truncatedเอาต์พุตถูกตัด
duration_msระยะเวลาที่รัน
okexit_code == 0 และไม่ timeout

การเรียกแบบ synchronous รันได้ ไม่เกิน 55 วินาที ทั้งสองเมธอดยังรับ env สำหรับการเรียกครั้งนั้นได้ด้วย ซึ่งจะแทนที่ค่าที่ตั้งไว้ตอนสร้าง

งานที่ใช้เวลานาน: งานเบื้องหลัง

ส่ง background=True (TypeScript: { background: true }) แล้วคุณจะได้ Task ทันที งานนี้ไม่มีขีดจำกัด 55 วินาที และรันได้จนกว่าอายุของ sandbox จะหมด สูงสุด 8 งานต่อ sandbox

task = sb.exec("cd /root/app && python3 -m pytest -q", background=True)
result = task.wait(on_output=lambda out, err: print(out, end=""))
print(result.state, result.exit_code)   # done 0
const task = await sb.exec("cd /root/app && npm test", { background: true });
const result = await task.wait({ onOutput: (out) => process.stdout.write(out) });
เมธอดทำอะไร
task.logs()stdout และ stderr ใหม่นับจากการเรียกครั้งก่อน
task.status()สถานะโดยไม่ดึงเอาต์พุต: running, done, failed, killed, timeout
task.wait(timeout, poll_interval=2, on_output)ตรวจสถานะจนงานจบ แล้วส่งคืน TaskResult
task.kill()หยุดงานและโปรเซสของงาน
sb.task(id) / sb.tasks()เชื่อมต่อกับงานอีกครั้ง / แสดงรายการงาน

ถ้า wait ถึง timeout ของตัวเอง จะโยน SandboxTimeoutError แต่งานยังคงรันต่อ งานที่กำลังรันยังช่วยไม่ให้ sandbox ชั่วคราวถูกลบเพราะไม่มีกิจกรรมด้วย

ไฟล์และการใช้งาน

upload(path, content, mode=None) เขียนไฟล์ลงพาธแบบสัมบูรณ์และส่งคืนขนาดไฟล์ download(path) ส่งคืนไบต์ download_text(path) / downloadText(path) ส่งคืนสตริง การโอนแต่ละครั้งจำกัดที่ 5 MB

usage() ส่งคืนจำนวนวินาทีที่รัน วินาที CPU ที่ใช้ ไบต์ขาออก ราคาต่อชั่วโมง billed_usd และ estimated_total_usd ส่วน tariffs() เป็นฟังก์ชันธรรมดาที่ไม่ต้องใช้คีย์ และส่งคืนราคาและขีดจำกัดปัจจุบัน กฎการคิดเงินอยู่ใน ขีดจำกัดและการคิดเงินของ sandbox

ข้อผิดพลาด

ข้อผิดพลาดทุกตัวของ API เป็นคลาสย่อยของ EqvpsError ที่มี status (HTTP), code (สตริงที่คงที่) และ body ส่วน retry_after / retryAfter จะมีค่าเมื่อเซิร์ฟเวอร์ส่งมา

คลาสHTTPcode ที่พบบ่อยควรทำอะไร
AuthenticationError401unauthenticatedตรวจสอบโทเค็น
InsufficientBalanceError402insufficient_balanceเติมยอดคงเหลือ
NotFoundError404not_foundid ผิด หรือไฟล์ไม่มีอยู่
SandboxPausedError409sandbox_pausedหยุดชั่วคราวหลังยอดคงเหลือหมด จะกลับมาทำงานหลังเติมเงิน
SandboxDeletedError410sandbox_deletedถูกลบถาวรแล้ว
FileTooLargeError413file_too_largeโอนไฟล์ให้ไม่เกิน 5 MB
ValidationError422invalid_requestแก้ไขพารามิเตอร์
RateLimitError429too_many_concurrent, too_many_tasks, rate_limitedรอแล้วลองใหม่
BudgetExceededError429budget_exceededถึงขีดจำกัดรายวันหรือรายเดือนของ sandbox แล้ว
CapacityError503capacityลองใหม่อีกสักครู่ หรือเลือกแพ็กเกจที่เล็กลง
SandboxTimeoutError—request_timeout, wait_timeoutคำขอ HTTP (หรือ wait) หมดเวลา ไม่ใช่ตัวคำสั่ง

429 ส่วนใหญ่มาจากขีดจำกัดสองข้อ: บัญชีหนึ่งรัน คำสั่งพร้อมกันได้ 2 คำสั่ง และมี sandbox ได้สูงสุด 20 ตัว SDK จะลองใหม่เมื่อเซิร์ฟเวอร์บอกว่าต้องรอนานเท่าไร หลังลองครบสามครั้งคุณจะได้รับ exception

เมื่อไรไม่ต้องใช้ SDK

ภาษาใดก็ได้ที่มี HTTP client เรียก API ได้โดยตรง endpoint ทั้งหมดอยู่ในไฟล์ OpenAPI ที่ https://eqvps.com/openapi.json ส่วน agent ใน Claude, Cursor หรือ MCP client อื่น ๆ ไม่ต้องเขียนโค้ดเลย เพราะ เซิร์ฟเวอร์ MCP มีเครื่องมือ sandbox ชุดเดียวกัน และถ้าคุณแค่อยากเห็นมันทำงาน หน้า sandbox มีรายการแพ็กเกจและเครดิตทดลอง $1 สำหรับบัญชีใหม่

คำถามที่พบบ่อย

SDK รองรับ Python และ Node.js เวอร์ชันใดบ้าง

แพ็กเกจ Python ต้องใช้ Python 3.8 ขึ้นไปและไม่มี dependency แพ็กเกจ TypeScript ก็ไม่มี dependency เช่นกัน ทำงานบน Node.js 18+, Deno, Bun และในเบราว์เซอร์ที่มี fetch

SDK เอา API key ของฉันมาจากไหน

จากอาร์กิวเมนต์ api_key / apiKey หรือจากตัวแปรสภาพแวดล้อม EQVPS_API_KEY คีย์นี้คือโทเค็นบัญชี EQVPS ธรรมดา ส่วน EQVPS_API_URL ใช้แทนที่ที่อยู่ API ซึ่งจำเป็นเฉพาะตอนทดสอบเท่านั้น

SDK ลองส่งคำขอที่ล้มเหลวซ้ำหรือไม่

ลองซ้ำเมื่อได้ 429 และ 503 สูงสุด 3 ครั้งเมื่อเซิร์ฟเวอร์ส่ง Retry-After มา โดยรอไม่เกิน 30 วินาทีต่อครั้ง สถานะเหล่านี้หมายความว่าคำขอถูกปฏิเสธก่อนที่จะมีอะไรรัน การลอง run และ exec ซ้ำจึงปลอดภัย ข้อผิดพลาดเครือข่ายจะลองซ้ำเฉพาะคำขอ GET ส่วน run, exec และ upload จะไม่ถูกส่งสองครั้งเด็ดขาด

exit code ที่ไม่ใช่ศูนย์ถือเป็น exception หรือไม่

ไม่ใช่ run และ exec ส่งผลลัพธ์ที่มี exit_code, stdout และ stderr กลับมา ให้ตรวจ result.ok หรือ result.exit_code ส่วน exception จะเกิดเฉพาะเมื่อ API มีข้อผิดพลาด เช่น ยอดคงเหลือหมดหรือโทเค็นไม่ถูกต้อง

จะแน่ใจได้อย่างไรว่า sandbox ถูกลบแม้โค้ดของฉันพัง

ใช้รูปแบบที่มีขอบเขต: ใน Python คือ with Sandbox.create() as sb ใน TypeScript คือ Sandbox.with(options, fn) หรือ await using เมื่อบล็อกจบ sandbox จะถูกลบ แม้หลังเกิด exception ก็ตาม

ความคิดเห็น

ยังไม่มีความคิดเห็น เป็นคนแรกสิ

แสดงความคิดเห็น

ความคิดเห็นจะถูกตรวจสอบก่อนแสดง