流式输出

更新时间:
复制 MD 格式

Code Interpreter 支持在代码执行期间接收 stdout、stderr 和富结果回调。流式输出适合前端实时展示、服务端日志采集和长时间分析任务进度反馈。

stdout 和 stderr

JavaScript / TypeScript 使用 onStdoutonStderr

await sandbox.runCode(
  `
import sys
import time

print("start")
time.sleep(3)
print("warning", file=sys.stderr)
time.sleep(3)
print("done")
`,
  {
    onStdout: (data) => console.log("stdout:", data),
    onStderr: (data) => console.error("stderr:", data),
    onError: (error) => console.error("error:", error),
  },
);

Python SDK 使用 on_stdouton_stderr。回调参数是输出片段,通常包含内容、是否为错误输出和时间戳。不要假设一次回调对应一整行业务日志。

sandbox.run_code(
    """
import sys
import time

print("start")
time.sleep(3)
print("warning", file=sys.stderr)
time.sleep(3)
print("done")
""",
    on_stdout=lambda data: print("stdout:", data),
    on_stderr=lambda data: print("stderr:", data),
    on_error=lambda error: print("error:", error),
)

富结果

表格、文本等富结果也可以通过回调提前接收。图表请写入文件后通过 Filesystem 取回。

await sandbox.runCode(
  `
import pandas as pd

df = pd.DataFrame({"value": [1, 2, 3]})
df
`,
  {
    onResult: (result) => console.log("result:", result),
  },
);

Python SDK 使用对应的 snake_case 回调参数,具体参数名以当前 SDK 版本为准。

sandbox.run_code(
    """
import pandas as pd

df = pd.DataFrame({"value": [1, 2, 3]})
df
""",
    on_result=lambda result: print("result:", result),
)

使用建议

  • 流式回调用于用户体验和日志观察,业务成功与否仍应以最终 execution.error 和返回结果判断。

  • 日志量较大时,应在业务侧截断、采样或落盘,避免把完整输出保存在内存中。

  • 前端展示流式输出时,应区分 stdout、stderr、富结果和最终状态。

  • 如果云沙箱当前模板或 SDK 未触发富结果回调,可回退为等待最终 execution.results