命令与文件

更新时间:
复制 MD 格式

命令没有输出,怎么办?

先同时看 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 或终止后重建,都不应假设变量还在。

业务结果应写入文件或外部存储,不要只保存在解释器内存变量里。