终端命令

最近更新时间:2025-09-28 18:50:42

我的收藏

前提条件

在执行下文所有代码前,请先按照 配置环境变量 部分完成环境变量设置。
若您使用 e2b_code_interpreter sdk 且不指定 template,必须已在账号下创建名为 code-interpreter-v1 的代码解释器沙箱工具。

执行命令

您可以使用 commands 类的 run 方法在沙箱实例中运行终端命令。
Python
from e2b_code_interpreter import Sandbox
# 创建沙箱实例
sandbox = Sandbox.create()
# 执行终端命令
response = sandbox.commands.run("ls")
# 可以通过user参数指定执行命令的身份,支持user和root
response = sandbox.commands.run("ls",user="root")

流式返回

Python
# 支持流式返回
command = """
echo foo
sleep 1
echo bar
"""
# 您可以根据您的需要传递on_stdout和on_stderr回调
sandbox.commands.run(
command,
on_stdout=lambda data: print(data),
on_stderr=lambda data: print(data)
)

后台执行

Python
# 支持后台执行命令
echo_code = """
for i in {1..3}; do
echo -n $i
sleep 1
done
echo done
"""
# 后台执行指令
echo_handler = sandbox.commands.run(echo_code,background=True)
# 等待后台执行的命令完成
response = echo_handler.wait(on_stdout=lambda data:print(data))

发送 stdin 终端输入

Python
import asyncio
async def send_stdin_test():
# 等待用户输入
read_code = """
echo test_stdin
read test
echo $test
"""
# 执行命令
read_handler = sandbox.commands.run(read_code,background=True)
# 创建一个任务来等待命令完成并显示输出
wait_task = asyncio.create_task(
asyncio.to_thread(
read_handler.wait,
on_stdout=lambda data: print(data, end=""),
)
)
# 发送stdin
sandbox.commands.send_stdin(read_handler.pid,"input\\n")
# 等待命令完成
response = await wait_task
asyncio.run(send_stdin_test())

列出正在运行的后台命令

Python
command_list = sandbox.commands.list()

结束后台运行的命令

Python
command_list = sandbox.commands.list()
for command in command_list:
sandbox.commands.kill(command.pid)