跳转到主要内容

Use code interpreter

import { TypeScriptExample, Render } from "~/components";

<Render file="sdk-0x-note" product="sandbox" params={{ href: "/sandbox/", title: "Sandboxes" }} />

This guide shows you how to execute Python and JavaScript code with rich outputs using the Code Interpreter API.

When to use code interpreter

Use the Code Interpreter API for simple, direct code execution with minimal setup:

  • Quick code execution - Run Python/JS code without environment setup
  • Rich outputs - Get charts, tables, images, HTML automatically
  • AI-generated code - Execute LLM-generated code with structured results
  • Persistent state - Variables preserved between executions in the same context

Use exec() for advanced or custom workflows:

  • System operations - Install packages, manage files, run builds
  • Custom environments - Configure specific versions, dependencies
  • Shell commands - Git operations, system utilities, complex pipelines
  • Long-running processes - Background services, servers

Create an execution context

Code contexts maintain state between executions:

``` import { getSandbox } from '@cloudflare/sandbox';

const sandbox = getSandbox(env.Sandbox, 'my-sandbox');

// Create a Python context const pythonContext = await sandbox.createCodeContext({ language: 'python' });

console.log('Context ID:', pythonContext.id); console.log('Language:', pythonContext.language);

// Create a JavaScript context const jsContext = await sandbox.createCodeContext({ language: 'javascript' });

</TypeScriptExample>

## Execute code

### Simple execution

<TypeScriptExample>

// Create context const context = await sandbox.createCodeContext({ language: 'python' });

// Execute code const result = await sandbox.runCode(print("Hello from Code Interpreter!") result = 2 + 2 print(f"2 + 2 = {result}"), { context: context.id });

console.log('Output:', result.output); console.log('Success:', result.success);

</TypeScriptExample>

### State within a context

Variables and imports remain available between executions in the same context, as long as the container stays active:

<TypeScriptExample>

const context = await sandbox.createCodeContext({ language: 'python' });

// First execution - import and define variables await sandbox.runCode(` import pandas as pd import numpy as np

data = [1, 2, 3, 4, 5] print("Data initialized") `, { context: context.id });

// Second execution - use previously defined variables const result = await sandbox.runCode(mean = np.mean(data) print(f"Mean: {mean}"), { context: context.id });

console.log(result.output); // "Mean: 3.0"

</TypeScriptExample>

:::note
Context state is lost if the container restarts due to inactivity. For critical data, store results outside the sandbox or design your code to reinitialize as needed.
:::

## Handle rich outputs

The code interpreter returns multiple output formats:

<TypeScriptExample>

const result = await sandbox.runCode(` import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [1, 4, 9]) plt.title('Simple Chart') plt.show() `, { context: context.id });

// Check available formats console.log('Formats:', result.formats); // ['text', 'png']

// Access outputs if (result.outputs.png) { // Return as image return new Response(atob(result.outputs.png), { headers: { 'Content-Type': 'image/png' } }); }

if (result.outputs.html) { // Return as HTML (pandas DataFrames) return new Response(result.outputs.html, { headers: { 'Content-Type': 'text/html' } }); }

if (result.outputs.json) { // Return as JSON return Response.json(result.outputs.json); }

</TypeScriptExample>

## Stream execution output

For long-running code, stream output in real-time:

<TypeScriptExample>

const context = await sandbox.createCodeContext({ language: 'python' });

const result = await sandbox.runCode( ` import time

for i in range(10): print(f"Processing item {i+1}/10...") time.sleep(0.5)

print("Done!") `, { context: context.id, stream: true, onOutput: (data) => { console.log('Output:', data); }, onResult: (result) => { console.log('Result:', result); }, onError: (error) => { console.error('Error:', error); } } );

</TypeScriptExample>

## Execute AI-generated code

Run LLM-generated code safely in a sandbox:

<TypeScriptExample>

// 1. Generate code with Claude const response = await fetch('https://api.anthropic.com/v1/messages', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': env.ANTHROPIC_API_KEY, 'anthropic-version': '2023-06-01' }, body: JSON.stringify({ model: 'claude-3-5-sonnet-20241022', max_tokens: 1024, messages: [{ role: 'user', content: 'Write Python code to calculate fibonacci sequence up to 100' }] }) });

const { content } = await response.json(); const code = content[0].text;

// 2. Execute in sandbox const context = await sandbox.createCodeContext({ language: 'python' }); const result = await sandbox.runCode(code, { context: context.id });

console.log('Generated code:', code); console.log('Output:', result.output); console.log('Success:', result.success);

</TypeScriptExample>

## Manage contexts

### List all contexts

<TypeScriptExample>

const contexts = await sandbox.listCodeContexts();

console.log(${contexts.length} active contexts:);

for (const ctx of contexts) { console.log( ${ctx.id} (${ctx.language})); }

</TypeScriptExample>

### Delete contexts

<TypeScriptExample>

// Delete specific context await sandbox.deleteCodeContext(context.id); console.log('Context deleted');

// Clean up all contexts const contexts = await sandbox.listCodeContexts(); for (const ctx of contexts) { await sandbox.deleteCodeContext(ctx.id); } console.log('All contexts deleted');

</TypeScriptExample>

## Best practices

- **Clean up contexts** - Delete contexts when done to free resources
- **Handle errors** - Always check `result.success` and `result.error`
- **Stream long operations** - Use streaming for code that takes >2 seconds
- **Validate AI code** - Review generated code before execution

## Related resources

- [Code Interpreter API reference](/sandbox/sdk/api/interpreter/) - Complete API documentation
- [AI code executor tutorial](/sandbox/sdk/tutorials/ai-code-executor/) - Build complete AI executor
- [Execute commands guide](/sandbox/sdk/guides/execute-commands/) - Lower-level command execution