命令没有输出,怎么办?
先同时看 stdout、stderr 和退出码。很多工具会把错误写入 stderr,把日志写入文件,或在后台进程中继续运行。
const result = await sandbox.commands.run("python3 script.py");
console.log(result.exitCode);
console.log(result.stdout);
console.error(result.stderr);命令返回非 0 退出码,是否一定是云沙箱问题?
不一定。非 0 退出码通常说明命令本身失败,常见原因是依赖缺失、路径错误、权限不足、网络失败或参数错误。
先用同一模板执行最小命令,再逐步增加业务依赖。不要直接把所有失败归因于 Sandbox 创建问题。
什么时候需要 PTY?
只有命令依赖终端行为时才使用 PTY,例如交互式 CLI、读取 TTY、彩色输出、进度条或需要持续输入的命令。
普通批处理、测试、构建和脚本执行不建议默认开启 PTY,否则 stdout/stderr 解析会更不稳定。
后台命令启动后,为什么访问不到服务?
常见原因是服务没有监听目标端口、启动后立即退出、监听在错误地址,或依赖还没初始化完成。
先在 Sandbox 内检查端口和日志,再调用 sandbox.getHost(port)。不要只根据后台命令返回成功判断服务已就绪。
文件写入后命令读不到,怎么排查?
检查路径、时序、工作目录和权限。生产任务建议使用绝对路径,并为每个任务创建独立目录,例如 /tmp/tasks/<task-id>。
如果多次执行涉及不同 Sandbox 或不同执行上下文,也要确认文件写入和命令执行发生在同一个环境里。
上传下载 URL 可以长期保存吗?
不建议将 URL 作为长期文件地址。它指向当前 Sandbox 中的指定路径,应限制 Sandbox 生命周期、文件路径和数据敏感性,也不要把包含敏感数据的 URL 写入日志或暴露给无关用户。
需要让未持有 SDK 鉴权信息的浏览器或下游系统直接访问 URL 时,创建 Sandbox 时需设置 secure=false;否则请求方必须携带 X-Access-Token。secure=false 会降低访问保护强度。需要长期保存或分发的文件,应写入 OSS、NAS、数据库或业务存储。
run_code 失败,先查什么?
先确认使用的是 e2b-code-interpreter 或 @e2b/code-interpreter SDK,以及 Code Interpreter 模板,例如 code-interpreter-v1。通用 e2b SDK 不提供 run_code / runCode。
再检查 Python、工作目录和必要依赖是否存在。
python3 --version
which python3
pwd如果普通命令能执行但 run_code 失败,重点排查模板是否包含代码解释器所需服务和启动逻辑。
多次执行之间变量会保留吗?
只有 Code Interpreter 在同一个 Code Context 中执行时,变量、导入和解释器状态才会保留。sandbox.commands.run() 每次启动独立进程,不能依赖 Shell 变量跨调用保留。
换 Sandbox、换 Code Context 或终止后重建,都不应假设变量还在。
业务结果应写入文件或外部存储,不要只保存在解释器内存变量里。