|
楼主 |
发表于 2023-10-15 12:31:23
|
显示全部楼层
- def exec_run(self, cmd, stdout=True, stderr=True, stdin=False, tty=False,
- privileged=False, user='', detach=False, stream=False,
- socket=False, environment=None, workdir=None, demux=False):
- """
- Run a command inside this container. Similar to
- ``docker exec``.
- 这个方法的主要目的是在 Docker 容器内执行一个命令。它提供了多个参数以控制命令的执行方式,包括是否附加到容器的标准输入、标准输出和标准错误,是否分配伪终端(TTY)、是否以特权模式运行、以及更多选项。
- 方法的参数和行为如下:
- cmd(字符串或列表):要在容器内执行的命令,可以是字符串或命令参数的列表。
- stdout(布尔值):是否附加到标准输出。默认为 True。
- stderr(布尔值):是否附加到标准错误。默认为 True。
- stdin(布尔值):是否附加到标准输入。默认为 False。
- tty(布尔值):是否分配伪终端(TTY)。默认为 False。
- privileged(布尔值):是否以特权模式运行。默认为 False。
- user(字符串):要作为哪个用户执行命令,默认为 "root"。
- detach(布尔值):如果为 True,则从执行命令中分离。默认为 False。
- stream(布尔值):是否流式返回数据。默认为 False。
- socket(布尔值):是否返回连接套接字以允许自定义读写操作。默认为 False。
- environment(字典或列表):执行命令时的环境变量设置。
- workdir(字符串):执行命令时的工作目录路径。
- demux(布尔值):是否将标准输出和标准错误分开。默认为 False。
- 根据方法的不同参数设置,exec_run 方法可以以不同方式执行命令,例如附加到容器的标准输入和输出,获取命令的输出结果等。最后,它返回一个包含执行结果的元组,其中包括命令的退出代码和输出数据。
- 示例使用方法如下:
- # 获取容器实例
- container = client.containers.get('your_container_id')
- # 执行命令并获取结果
- result = container.exec_run(cmd='ls -l', stdout=True, stderr=True, tty=False)
- # 输出命令的执行结果
- print(f"Exit Code: {result[0]}")
- print(f"Output: {result[1].decode('utf-8')}")
- """
- resp = self.client.api.exec_create(
- self.id, cmd, stdout=stdout, stderr=stderr, stdin=stdin, tty=tty,
- privileged=privileged, user=user, environment=environment,
- workdir=workdir,
- )
- exec_output = self.client.api.exec_start(
- resp['Id'], detach=detach, tty=tty, stream=stream, socket=socket,
- demux=demux
- )
- if socket or stream:
- return ExecResult(None, exec_output)
- return ExecResult(
- self.client.api.exec_inspect(resp['Id'])['ExitCode'],
- exec_output
- )
复制代码 |
|