−25%

روی پرداخت سالانه Windows، تا ۳۱ اکتبر. مشاهده پلن‌ها

EQVPS
شروع کنید

مرجع API سندباکس: SDK برای Python و TypeScript

همهٔ متدهای SDK سندباکس EQVPS در یک صفحه: پارامترها، مقادیر پیش‌فرض، خروجی‌ها و هر ۱۱ کلاس خطا، با یک مثال یکسان در Python و TypeScript.

آخرین بررسی: 2026-10-10 · SDK 0.2.0 (PyPI eqvps، npm @eqvps/sdk)

SDK لایه‌ای نازک روی REST API سندباکس‌هاست. شما را از سه دردسر خلاص می‌کند: ساختن دستی درخواست‌ها، فرستادن دوباره‌شان وقتی پلتفرم شلوغ است، و فراموش کردن حذف سندباکس وقتی کد استثنا می‌دهد. همهٔ مطالب این صفحه با نسخهٔ 0.2.0 هر دو بسته مطابقت دارد.

اگر تا حالا سندباکسی نساخته‌اید، اول با راهنمای اتصال ۵ دقیقه‌ای توکن بگیرید. اینکه سندباکس چیست و داخلش چه هست، در سندباکس‌ها آمده است.

نصب و پیکربندی

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

یک برنامهٔ یکسان به هر دو زبان: سندباکس بسازید، کد اجرا کنید، حذفش کنید.

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.create(...) یک سندباکس را راه می‌اندازد، معمولاً در حدود یک ثانیه. Python آرگومان‌های نام‌دار می‌گیرد و TypeScript یک شیء گزینه‌ها.

PythonTypeScriptپیش‌فرضمعنا
modemode"ephemeral""ephemeral" (ثانیه‌ای) یا "persistent" (برای هر ساعتِ شروع‌شده، دیسک را نگه می‌دارد)
tarifftariff"small"micro، small، standard، plus، pro، max
idle_timeoutidleTimeout300ثانیه‌های بی‌فعالیتی پیش از حذف سندباکس موقت، تا 3600
ttlttl—بیشترین عمر به ثانیه: تا 86400 برای موقت، 2592000 برای ماندگار
envenv—متغیرهای محیطی برای همهٔ دستورها، رمزگذاری‌شده نگه داشته می‌شوند
api_key، base_urlapiKey، baseUrlمتغیرهای محیطیجای EQVPS_API_KEY / EQVPS_API_URL را می‌گیرند
timeouttimeoutMs۷۰ ثانیهمهلت HTTP برای هر درخواست
max_retriesmaxRetries3تعداد تلاش دوباره در 429/503

متد Sandbox.connect(id) به سندباکسی موجود وصل می‌شود، معمولاً سندباکسی ماندگار که دیروز ساخته‌اید. Sandbox.list() همهٔ سندباکس‌های حساب را برمی‌گرداند، چه در حال اجرا و چه متوقف‌شده.

ویژگی‌ها: id (sb_ + ۲۴ نویسهٔ شانزده‌شانزدهی)، mode، tariff، state (running، starting، paused، pausing، resuming، deleting، deleted)، env_keys / envKeys (فقط نام‌ها، مقدارها هرگز برنمی‌گردند) و info (شیء خام). refresh() آن‌ها را دوباره بارگذاری می‌کند.

متد kill() سندباکس را حذف و صورتحساب را متوقف می‌کند. فراخوانی آن برای سندباکسی که از قبل حذف شده خطا نیست.

اجرای کد

متد 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) یک دستور شل اجرا می‌کند: رشته از bash -lc می‌گذرد و فهرست بدون شل و به‌صورت argv اجرا می‌شود.

هر دو ExecResult برمی‌گردانند:

فیلدمعنا
exit_codeکد خروج فرایند
stdout، stderrخروجی، تا 1 MiB برای هر جریان
timed_outدستور به مهلتش رسید
truncatedخروجی بریده شد
duration_msمدت اجرا
okexit_code == 0 و بدون عبور از مهلت

یک فراخوانی همگام حداکثر ۵۵ ثانیه طول می‌کشد. هر دو متد env را هم فقط برای همان فراخوانی می‌پذیرند که جای مقدارهای تعیین‌شده هنگام ساخت را می‌گیرد.

کارهای طولانی: کار پس‌زمینه

background=True (در TypeScript: { background: true }) را بدهید تا فوراً یک Task بگیرید. محدودیت ۵۵ ثانیه ندارد و می‌تواند تا پایان عمر سندباکس اجرا شود. حداکثر ۸ کار برای هر سندباکس.

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 تمام شود، SandboxTimeoutError می‌دهد، اما کار ادامه پیدا می‌کند. کار در حال اجرا همچنین نمی‌گذارد سندباکس موقت به‌خاطر بی‌فعالیتی حذف شود.

فایل‌ها و مصرف

متد upload(path, content, mode=None) فایلی را در مسیر مطلق می‌نویسد و اندازه‌اش را برمی‌گرداند. download(path) بایت برمی‌گرداند و download_text(path) / downloadText(path) رشته. هر انتقال حداکثر 5 MB است.

متد usage() ثانیه‌های اجرا، ثانیه‌های CPU مصرف‌شده، بایت‌های خروجی، قیمت ساعتی، billed_usd و estimated_total_usd را برمی‌گرداند. tariffs() تابعی ساده و بدون کلید است که قیمت‌ها و محدودیت‌های فعلی را برمی‌گرداند. قواعد صورتحساب در محدودیت‌ها و صورتحساب سندباکس آمده است.

خطاها

هر خطای API زیرکلاسی از EqvpsError است با status (HTTP)، code (رشتهٔ ثابت) و body. وقتی سرور بفرستد، retry_after / retryAfter پر می‌شود.

کلاسHTTPcode رایجچه کنید
AuthenticationError401unauthenticatedتوکن را بررسی کنید
InsufficientBalanceError402insufficient_balanceموجودی را شارژ کنید
NotFoundError404not_foundشناسهٔ اشتباه یا فایل ناموجود
SandboxPausedError409sandbox_pausedبه‌خاطر تمام شدن موجودی متوقف شده؛ پس از شارژ ادامه می‌دهد
SandboxDeletedError410sandbox_deletedبرای همیشه حذف شده
FileTooLargeError413file_too_largeانتقال‌ها را زیر 5 MB نگه دارید
ValidationError422invalid_requestپارامترها را اصلاح کنید
RateLimitError429too_many_concurrent، too_many_tasks، rate_limitedصبر کنید و دوباره امتحان کنید
BudgetExceededError429budget_exceededبه سقف هزینهٔ روزانه یا ماهانهٔ سندباکس رسیده‌اید
CapacityError503capacityکمی بعد دوباره امتحان کنید یا تعرفهٔ کوچک‌تری بگیرید
SandboxTimeoutError—request_timeout، wait_timeoutمهلت درخواست HTTP (یا wait) تمام شد، نه خود دستور

بیشتر خطاهای 429 از دو محدودیت می‌آیند: هر حساب همزمان ۲ دستور اجرا می‌کند و حداکثر ۲۰ سندباکس نگه می‌دارد. وقتی سرور زمان انتظار را بگوید SDK دوباره تلاش می‌کند و پس از سه بار، استثنا به شما می‌رسد.

چه وقت SDK لازم نیست

هر زبانی که کلاینت HTTP دارد می‌تواند مستقیم API را صدا بزند؛ نقطه‌های پایانی در فایل OpenAPI در https://eqvps.com/openapi.json آمده‌اند. ایجنت‌ها در Claude، Cursor یا دیگر کلاینت‌های MCP اصلاً به کد نیاز ندارند: سرور MCP همان ابزارهای سندباکس را دارد. و اگر فقط می‌خواهید کارکردش را ببینید، صفحهٔ سندباکس‌ها تعرفه‌ها و آزمایش $1 برای حساب‌های تازه را نشان می‌دهد.

پرسش‌های متداول

SDK از کدام نسخه‌های Python و Node.js پشتیبانی می‌کند؟

بستهٔ Python به Python 3.8 یا جدیدتر نیاز دارد و هیچ وابستگی‌ای ندارد. بستهٔ TypeScript هم وابستگی ندارد و روی Node.js 18+، Deno، Bun و مرورگرهایی که fetch دارند اجرا می‌شود.

SDK کلید API من را از کجا برمی‌دارد؟

از آرگومان api_key / apiKey یا از متغیر محیطی EQVPS_API_KEY. کلید همان توکن معمولی حساب EQVPS است. EQVPS_API_URL نشانی API را عوض می‌کند و فقط برای آزمایش لازم است.

آیا SDK درخواست‌های ناموفق را دوباره می‌فرستد؟

وقتی سرور Retry-After بفرستد، 429 و 503 را تا ۳ بار دوباره می‌فرستد و هر بار حداکثر ۳۰ ثانیه صبر می‌کند. این وضعیت‌ها یعنی درخواست پیش از اجرای هر چیزی رد شده، پس تکرار run و exec بی‌خطر است. خطاهای شبکه فقط برای GET تکرار می‌شوند و run، exec و upload هرگز دو بار فرستاده نمی‌شوند.

آیا کد خروج غیرصفر استثنا محسوب می‌شود؟

نه. run و exec نتیجه‌ای شامل exit_code، stdout و stderr برمی‌گردانند. result.ok یا result.exit_code را بررسی کنید. استثنا فقط در خطاهای API رخ می‌دهد، مثل موجودی خالی یا توکن نامعتبر.

چطور مطمئن شوم اگر کدم از کار افتاد سندباکس حذف می‌شود؟

از شکل دارای محدوده استفاده کنید: در Python ‏with Sandbox.create() as sb و در TypeScript ‏Sandbox.with(options, fn) یا await using. سندباکس با پایان بلوک حذف می‌شود، حتی پس از استثنا.

نظرات

هنوز نظری نیست. اولین نفر باشید.

یک نظر بگذارید

نظرات پیش از نمایش بررسی می‌شوند.