Denne guide tager dig fra ingenting til en fungerende sandkasse i Python. Du starter en isoleret Firecracker-microVM, kører kode i den, installerer en pakke, flytter en fil ind og ud og kører noget langt i baggrunden. Hvert trin er et par linjer, du kan indsætte.
Du skal bruge Python 3.8 eller nyere og en EQVPS-konto. SDK'et har ingen afhængigheder.
1. Skaf en token
Sandkasser betales fra kontoens saldo, så SDK'et skal bruge en kontotoken. Forbind din konto viser de tre måder at få en på: kontrolpanelet, API'et eller MCP-serveren. Læg den derefter i miljøet:
export EQVPS_API_KEY="your-token"
Ingen saldo endnu? Det gør ikke noget. Første gang en ny konto opretter en sandkasse uden nok saldo, får den 1 $ i sandkassekredit, gyldig i 14 dage.
2. Installér SDK'et
pip install eqvps
3. Start en sandkasse og kør kode
Gem dette som hello.py og kør det:
from eqvps import Sandbox
with Sandbox.create(tariff="small") as sb:
print(sb.id)
r = sb.run("import platform; print(platform.python_version())")
print(r.exit_code, r.stdout)
Du ser sandkassens id (sb_ og 24 tegn mere) og derefter 0 3.12.x. Sandkassen startede på cirka et sekund, kørte koden og blev slettet, da with-blokken sluttede.
Godt at vide om resultatet:
r.oker true, når exitkoden er 0, og kommandoen ikke ramte sin timeout;- en exitkode forskellig fra nul er ikke en exception, så tjek selv
r.ok; stdoutogstderrer begrænset til 1 MiB hver, ogr.truncatedfortæller, om output blev skåret af.
4. Installér en pakke og kør shellkommandoer
I sandkassen er du root på et lille Linux-system med Python, Node.js, git og curl. exec kører enhver shellkommando:
from eqvps import Sandbox
with Sandbox.create(tariff="small") as sb:
sb.exec("pip install --quiet requests", timeout=55)
r = sb.run("import requests; print(requests.get('https://example.com').status_code)")
print(r.stdout) # 200
Standardtimeouten er 30 sekunder, og et synkront kald må højst tage 55. Store installationer hører hjemme i en baggrundsopgave (trin 6).
5. Flyt filer ind og ud
from eqvps import Sandbox
with Sandbox.create() as sb:
sb.upload("/root/data.csv", "a,b\n1,2\n3,4\n")
sb.run("""
import csv
rows = list(csv.DictReader(open('/root/data.csv')))
open('/root/sum.txt', 'w').write(str(sum(int(r['b']) for r in rows)))
""")
print(sb.download_text("/root/sum.txt")) # 6
Stier skal være absolutte. En overførsel er begrænset til 5 MB; download returnerer bytes, download_text en streng.
6. Kør et langt job i baggrunden
Giv background=True med, og du får en opgave i stedet for at vente. Den har ingen grænse på 55 sekunder:
from eqvps import Sandbox
with Sandbox.create(tariff="standard") as sb:
task = sb.exec("for i in 1 2 3 4 5; do echo step $i; sleep 20; done", background=True)
result = task.wait(on_output=lambda out, err: print(out, end=""))
print(result.state, result.exit_code) # done 0
task.wait() spørger hvert 2. sekund og udskriver nyt output, så snart det kommer. Du kan også selv kalde task.logs(), eller task.kill() for at stoppe den. Så længe en opgave kører, slettes sandkassen ikke på grund af inaktivitet.
Hvad det kostede
Hver with-blok ovenfor levede et par sekunder og blev afregnet med minimum på 60 sekunder. På small er det 0,00055 $ pr. blok, så alle fem eksempler tilsammen koster omkring en tredjedel cent. Priser for alle tariffer, den vedvarende tilstand og forbrugslofter står i grænser og afregning for sandboxes.
Når noget går galt
Fejl fra API'et er exceptions, du kan fange:
from eqvps import Sandbox, InsufficientBalanceError, RateLimitError
try:
with Sandbox.create() as sb:
print(sb.run("print(1)").stdout)
except InsufficientBalanceError:
print("Top up the balance")
except RateLimitError as e:
print("Too many at once, retry in", e.retry_after)
SDK'et prøver allerede 429- og 503-svar igen op til tre gange, når serveren siger, hvor længe man skal vente. Alle 11 fejlklasser står i SDK-referencen.
Næste skridt
- De samme trin i JavaScript: TypeScript-SDK til sandkasser på 5 minutter.
- Lad en AI-model skrive koden og køre den her: din første agentopgave i en sandkasse.
- Tariffer, prøveperioden og hvad der er i en sandkasse: sandkassesiden.
Kommentarer
Ingen kommentarer endnu. Vær den første.