← Sandbox SDK / sandbox / 1-0-preview
Code interpreter
На @next, интерпретатор кода является расширением, подключаемым по желанию, а не методами базового Sandbox. Имена методов совпадают с именами в стабильном интерпретаторе. Вы подключаетесь один раз, а затем вызываете sandbox.interpreter.*. runCode возвращает обычные сериализуемые данные через границу между Worker и Durable Object.
Сигнатуры и типы: Interpreter API.
Подключение
import { Sandbox as BaseSandbox } from "@cloudflare/sandbox";
import { withInterpreter } from "@cloudflare/sandbox/interpreter";
export class Sandbox extends BaseSandbox {
interpreter = withInterpreter(this);
}import { Sandbox as BaseSandbox } from "@cloudflare/sandbox";
import { withInterpreter } from "@cloudflare/sandbox/interpreter";
export class Sandbox extends BaseSandbox<Env> {
interpreter = withInterpreter(this);
}Экспортируйте этот класс из своего Worker. Сайдкар разворачивается при первом использовании.
Изображение
| Язык | Изображение |
|---|---|
| JavaScript / TypeScript | Образ песочницы по умолчанию (или любой вариант со средой выполнения JS) |
| Python | -python вариант образа |
Используйте тот же пакет preview Worker и ту же версию образа контейнера. См. Dockerfile.
Выполнение кода
A контекст сохраняет переменные и импорты, пока вы не удалите его или пока контейнер не будет заменён.
const sandbox = getSandbox(env.Sandbox, "user-123");
const context = await sandbox.interpreter.createCodeContext({
language: "python",
cwd: "/workspace",
});
await sandbox.interpreter.runCode("x = 2", { context });
const result = await sandbox.interpreter.runCode("x * 21", { context });
if (result.error) {
console.error(result.error.name, result.error.message);
} else {
console.log(result.results, result.logs.stdout);
}const sandbox = getSandbox(env.Sandbox, "user-123");
const context = await sandbox.interpreter.createCodeContext({
language: "python",
cwd: "/workspace",
});
await sandbox.interpreter.runCode("x = 2", { context });
const result = await sandbox.interpreter.runCode("x * 21", { context });
if (result.error) {
console.error(result.error.name, result.error.message);
} else {
console.log(result.results, result.logs.stdout);
}Если вы не укажете context, runCode использует контекст по умолчанию для языка (язык по умолчанию: python). Языки: python, javascript, typescript.
Для полей результата, потоковая передача (runCodeStream), а также методы контекста для получения списка и удаления, см. Interpreter API.
Контексты существуют только в текущий контейнер. После остановки или замены создайте новые. См. Жизненный цикл песочницы.
См. также
- Interpreter API
- Расширения
- Миграция
- Стабильное руководство: Используйте интерпретатор кода