前提条件
在执行下文所有代码前,请先按照 配置环境变量 部分完成环境变量设置。
若您使用 e2b_code_interpreter sdk 且不指定 template,必须已在账号下创建名为 code-interpreter-v1 的代码解释器沙箱工具。
执行命令
您可以使用 commands 类的 run 方法在沙箱实例中运行终端命令。
from e2b_code_interpreter import Sandbox# 创建沙箱实例sandbox = Sandbox.create()# 执行终端命令response = sandbox.commands.run("ls")# 可以通过user参数指定执行命令的身份,支持user和rootresponse = sandbox.commands.run("ls",user="root")
流式返回
# 支持流式返回command = """echo foosleep 1echo bar"""# 您可以根据您的需要传递on_stdout和on_stderr回调sandbox.commands.run(command,on_stdout=lambda data: print(data),on_stderr=lambda data: print(data))
后台执行
# 支持后台执行命令echo_code = """for i in {1..3}; doecho -n $isleep 1doneecho done"""# 后台执行指令echo_handler = sandbox.commands.run(echo_code,background=True)# 等待后台执行的命令完成response = echo_handler.wait(on_stdout=lambda data:print(data))
发送 stdin 终端输入
import asyncioasync def send_stdin_test():# 等待用户输入read_code = """echo test_stdinread testecho $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=""),))# 发送stdinsandbox.commands.send_stdin(read_handler.pid,"input\\n")# 等待命令完成response = await wait_taskasyncio.run(send_stdin_test())
列出正在运行的后台命令
command_list = sandbox.commands.list()
结束后台运行的命令
command_list = sandbox.commands.list()for command in command_list:sandbox.commands.kill(command.pid)