Streaming

Use E2B SDK allows you to stream the output, and results when executing code in the sandbox.

Stream stdout and stderr

When using the runCode() method in JavaScript or run_code() in Python you can pass onStdout/on_stdout and onStderr/on_stderr callbacks to handle the output.

import { Sandbox } from '@e2b/code-interpreter'

const codeToRun = `
  import time
  import sys
  print("This goes first to stdout")
  time.sleep(3)
  print("This goes later to stderr", file=sys.stderr)
  time.sleep(3)
  print("This goes last")
`
const sandbox = await Sandbox.create()
sandbox.runCode(codeToRun, {
  // Use `onError` to handle runtime code errors
  onError: error => console.error('error:', error), 
  onStdout: data => console.log('stdout:', data), 
  onStderr: data => console.error('stderr:', data), 
})

The code above will print the following:

stdout: {
  error: false,
  line: "This goes first to stdout\n",
  timestamp: 1729049666861000,
}
stderr: {
  error: true,
  line: "This goes later to stderr\n",
  timestamp: 1729049669924000,
}
stdout: {
  error: false,
  line: "This goes last\n",
  timestamp: 1729049672664000,
}

Stream results

When using the runCode() method in JavaScript or run_code() in Python you can pass onResults/on_results callback to receive results from the sandbox like charts, tables, text, and more.

const codeToRun = `
import matplotlib.pyplot as plt

# Prepare data
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [10, 20, 15, 25]

# Create and customize the bar chart
plt.figure(figsize=(10, 6))
plt.bar(categories, values, color='green')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Values by Category')

# Display the chart
plt.show()
`
const sandbox = await Sandbox.create()
await sandbox.runCode(codeToRun, {
  onResult: result => console.log('result:', result), 
})