内容提要
Vercel Sandbox 新增标准输入(stdin)支持,可向运行中的命令发送输入,用于与 stdio MCP 服务器等命令行程序交互。TypeScript SDK 中,在 runCommand() 设置 stdin: true 和 detached: true,用 writeStdin() 发送输入、closeStdin() 结束,也可将 stdin 设为 Node.js 可读流。Python SDK 中设置 stdin=subprocess.PIPE,用 server.stdin.send() 发送,communicate() 关闭并收集输出;一次性输入可直接传给 run_process()。
延伸解读
交互式命令支持的实际意义
Vercel Sandbox 新增的 stdin 支持,让沙箱内运行的命令不再只能单向输出,而是可以接收外部输入。这对于需要双向通信的场景尤为重要,例如与 stdio MCP 服务器(如 agent-browser)交换消息,或向其他命令行程序动态发送数据。开发者现在可以在沙箱中构建更接近真实终端交互的自动化流程,而无需依赖一次性输入。
TypeScript SDK 的关键配置
在 TypeScript SDK 中,必须同时设置 stdin: true 和 detached: true 才能启用标准输入。detached 模式允许命令在后台运行,从而支持后续通过 writeStdin() 发送输入、closeStdin() 结束输入。此外,stdin 也可以直接设为 Node.js 可读流(如 process.stdin),SDK 会自动转发流数据并在流结束时关闭命令的标准输入,简化了流式交互的实现。
Python SDK 的两种输入方式
Python SDK 提供了更灵活的选择:对于需要持续交互的进程,设置 stdin=subprocess.PIPE,通过 server.stdin.send() 发送输入,最后用 communicate() 关闭 stdin 并收集剩余输出;对于一次性输入,则可以直接将输入传给 run_process()。这种区分让开发者能根据命令的交互特性选择合适的方法,避免不必要的复杂性。
Q&A
Vercel Sandbox 现在支持什么新功能?
Vercel Sandbox 现在支持通过标准输入(stdin)向运行中的命令发送输入。
在 TypeScript SDK 中如何向运行中的命令发送输入?
在 runCommand() 中设置 stdin: true 和 detached: true,然后使用 writeStdin() 发送输入,用 closeStdin() 结束输入。
Python SDK 中如何向进程的标准输入发送数据?
设置 stdin=subprocess.PIPE,然后使用 server.stdin.send() 发送输入,调用 communicate() 关闭 stdin 并收集输出。
stdin 支持可以用于哪些场景?
可用于与 stdio MCP 服务器(如 agent-browser)交换消息,或向其他命令行程序发送数据。
TypeScript SDK 中能否将 stdin 设置为一个流?
可以,将 stdin 设置为 Node.js 可读流(如 process.stdin),SDK 会转发流数据并在流结束时关闭命令的标准输入。
Python 中如何一次性向命令传递所有输入?
对于一次性接收所有输入的命令,可以直接将输入传递给 Python 的 run_process()。