−25%

yıllık Windows ödemesinde, 31 Ekim'e kadar. Paketlere git

EQVPS
Hemen başla

Sandbox API başvurusu: Python ve TypeScript SDK

EQVPS sandbox SDK'sının tüm metotları tek sayfada: parametreler, varsayılan değerler, dönüş değerleri ve 11 hata sınıfının tamamı, Python ve TypeScript'te aynı örnekle.

Son kontrol: 2026-10-10 · SDK 0.2.0 (PyPI eqvps, npm @eqvps/sdk)

SDK, sandbox REST API'si üzerinde ince bir katmandır. Sizi üç şeyden kurtarır: istekleri elle kurmak, platform meşgulken yeniden denemek ve kod istisna fırlattığında sandbox'ı silmeyi unutmak. Buradaki her şey iki paketin 0.2.0 sürümüne karşılık gelir.

Daha önce hiç sandbox oluşturmadıysanız 5 dakikalık bağlantı rehberi önce size bir token verir. Sandbox'ın ne olduğu ve içinde ne bulunduğu Sandbox'lar sayfasında anlatılıyor.

Kurulum ve yapılandırma

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

İki dilde aynı program: bir sandbox oluştur, kod çalıştır, sil.

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 oluşturma ve bulma

Sandbox.create(...) bir sandbox başlatır, genellikle yaklaşık bir saniyede. Python isimli argümanlar, TypeScript tek bir seçenek nesnesi alır.

PythonTypeScriptVarsayılanAnlamı
modemode"ephemeral""ephemeral" (saniye başına) veya "persistent" (başlanan saat başına, diskini korur)
tarifftariff"small"micro, small, standard, plus, pro, max
idle_timeoutidleTimeout300geçici bir sandbox silinmeden önce etkinliksiz geçen saniye, en fazla 3600
ttlttl—saniye cinsinden en uzun ömür: geçicide 86400'e, kalıcıda 2592000'e kadar
envenv—her komut için ortam değişkenleri, şifreli saklanır
api_key, base_urlapiKey, baseUrlortam değişkenleriEQVPS_API_KEY / EQVPS_API_URL yerine geçer
timeouttimeoutMs70 sistek başına HTTP zaman aşımı
max_retriesmaxRetries3429/503'te yeniden deneme

Sandbox.connect(id) mevcut bir sandbox'a bağlanır; genellikle dün oluşturduğunuz kalıcı bir sandbox'a. Sandbox.list() hesaptaki çalışan ve duraklatılmış tüm sandbox'ları döndürür.

Özellikler: id (sb_ + 24 onaltılık karakter), mode, tariff, state (running, starting, paused, pausing, resuming, deleting, deleted), env_keys / envKeys (yalnızca adlar, değerler hiç geri gelmez) ve info (ham nesne). refresh() bunları yeniden yükler.

kill() sandbox'ı siler ve faturalamayı durdurur. Zaten silinmiş bir sandbox için çağırmak hata sayılmaz.

Kod çalıştırma

run(code, language="python", timeout=30) kodu stdin üzerinden Python 3.12, Node.js 22 veya bash'e gönderir ("python", "node", "bash"). exec(command, cwd=None, stdin=None, timeout=30) bir kabuk komutu çalıştırır: dize bash -lc üzerinden geçer, liste kabuk olmadan argv olarak çalıştırılır.

İkisi de bir ExecResult döndürür:

AlanAnlamı
exit_codeişlemin çıkış kodu
stdout, stderrçıktı, akış başına 1 MiB'e kadar
timed_outkomut zaman aşımına uğradı
truncatedçıktı kesildi
duration_msne kadar sürdüğü
okexit_code == 0 ve zaman aşımı yok

Senkron bir çağrı en fazla 55 saniye sürer. İki metot da yalnızca o çağrı için env alır; oluşturma sırasında belirlenen değerlerin yerine geçer.

Uzun işler: arka plan görevleri

background=True (TypeScript: { background: true }) verin, hemen bir Task alırsınız. 55 saniye sınırı yoktur ve sandbox'ın ömrü bitene kadar çalışabilir. Sandbox başına en fazla 8 görev.

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) });
MetotNe yapar
task.logs()önceki çağrıdan bu yana yeni stdout ve stderr
task.status()çıktıyı tüketmeden durum: running, done, failed, killed, timeout
task.wait(timeout, poll_interval=2, on_output)görev bitene kadar sorgular, TaskResult döndürür
task.kill()görevi ve süreçlerini durdurur
sb.task(id) / sb.tasks()bir göreve yeniden bağlanma / görevleri listeleme

wait kendi zaman aşımına ulaşırsa SandboxTimeoutError fırlatır, ama görev çalışmaya devam eder. Çalışan bir görev, geçici bir sandbox'ın hareketsizlik yüzünden silinmesini de engeller.

Dosyalar ve kullanım

upload(path, content, mode=None) mutlak bir yola dosya yazar ve boyutunu döndürür. download(path) bayt, download_text(path) / downloadText(path) dize döndürür. Tek bir aktarım 5 MB ile sınırlıdır.

usage() çalışma saniyelerini, kullanılan CPU saniyelerini, giden baytları, saatlik fiyatı, billed_usd ve estimated_total_usd değerlerini döndürür. tariffs() anahtar gerektirmeyen basit bir fonksiyondur ve güncel fiyatları ve sınırları döndürür. Faturalama kuralları Sandbox sınırları ve faturalama sayfasında.

Hatalar

Her API hatası, status (HTTP), code (sabit dize) ve body alanlarına sahip bir EqvpsError alt sınıfıdır. Sunucu gönderdiğinde retry_after / retryAfter doldurulur.

SınıfHTTPTipik codeNe yapmalı
AuthenticationError401unauthenticatedtoken'ı kontrol edin
InsufficientBalanceError402insufficient_balancebakiye yükleyin
NotFoundError404not_foundyanlış id ya da dosya yok
SandboxPausedError409sandbox_pausedbakiye bittiği için duraklatıldı; yüklemeden sonra devam eder
SandboxDeletedError410sandbox_deletedkalıcı olarak silindi
FileTooLargeError413file_too_largeaktarımları 5 MB'ın altında tutun
ValidationError422invalid_requestparametreleri düzeltin
RateLimitError429too_many_concurrent, too_many_tasks, rate_limitedbekleyip yeniden deneyin
BudgetExceededError429budget_exceededsandbox için günlük veya aylık harcama sınırınıza ulaşıldı
CapacityError503capacitybiraz sonra yeniden deneyin ya da daha küçük bir tarife seçin
SandboxTimeoutError—request_timeout, wait_timeoutkomut değil, HTTP isteği (veya wait) zaman aşımına uğradı

429'ların çoğuna iki sınır yol açar: bir hesap aynı anda 2 komut çalıştırır ve en fazla 20 sandbox tutar. SDK, sunucu ne kadar bekleneceğini söylediğinde bunları yeniden dener; üç denemeden sonra istisnayı alırsınız.

SDK'ya ne zaman gerek yok

HTTP istemcisi olan her dil API'yi doğrudan çağırabilir; uç noktalar https://eqvps.com/openapi.json adresindeki OpenAPI dosyasında. Claude, Cursor veya diğer MCP istemcilerindeki ajanların hiç koda ihtiyacı yok: MCP sunucusu aynı sandbox araçlarına sahip. Yalnızca nasıl çalıştığını görmek istiyorsanız, sandbox sayfası tarifeleri ve yeni hesaplar için $1'lık denemeyi gösterir.

Sık sorulan sorular

SDK hangi Python ve Node.js sürümlerini destekliyor?

Python paketi Python 3.8 veya üstünü gerektirir ve bağımlılığı yoktur. TypeScript paketinin de bağımlılığı yoktur; Node.js 18+, Deno, Bun ve fetch destekleyen tarayıcılarda çalışır.

SDK API anahtarımı nereden alıyor?

api_key / apiKey argümanından ya da EQVPS_API_KEY ortam değişkeninden. Anahtar sıradan bir EQVPS hesap token'ıdır. EQVPS_API_URL API adresini değiştirir; yalnızca test için gerekir.

SDK başarısız istekleri yeniden dener mi?

Sunucu Retry-After gönderdiğinde 429 ve 503'ü en fazla 3 kez yeniden dener, her seferinde en çok 30 saniye bekler. Bu durumlar isteğin hiçbir şey çalışmadan reddedildiği anlamına gelir; bu yüzden run ve exec'i yeniden denemek güvenlidir. Ağ hataları yalnızca GET için yeniden denenir; run, exec ve upload asla iki kez gönderilmez.

Sıfır olmayan çıkış kodu bir istisna mıdır?

Hayır. run ve exec, exit_code, stdout ve stderr içeren bir sonuç döndürür. result.ok veya result.exit_code değerine bakın. İstisnalar yalnızca boş bakiye ya da geçersiz token gibi API hatalarında atılır.

Kodum çökerse sandbox'ın silindiğinden nasıl emin olurum?

Kapsamlı biçimi kullanın: Python'da with Sandbox.create() as sb, TypeScript'te Sandbox.with(options, fn) ya da await using. Sandbox, blok bittiğinde silinir; bir istisnadan sonra da.

Yorumlar

Henüz yorum yok. İlk olun.

Bir yorum bırakın

Yorumlar görünmeden önce denetlenir.