python库使用docker容器的伪tty

dockerpt的Python项目详细描述


#docker pty

使用python客户端提供操作分配给
docker容器的伪tty(pty)所需的功能。

[![构建状态](https://travis-ci.org/d11wtq/dockerpy.svg?branch=master)]
(https://travis ci.org/d11wtq/docker py)


假设您已经安装了它。

=client.create_container(
image='busybox:latest',
stdin_open=true,
tty=true,
command='/bin/sh',



dockerptiy.start(client,container)
`````

控制是屈服于容器的PTY直到容器的出口,或者容器的PTY被关闭。
BR/>这是一个安全的操作,所有的资源都恢复到原来的
状态。
BR/> & GT;**注意:** DokKpTy确实支持连接到非TTY容器来流
容器输出,如果不分配伪tty,显然不可能“控制”容器。


如果按“c-p c-q”,容器的pty将关闭,但容器将继续运行。换句话说,您将从容器中分离出来,并可以使用另一个“dockerpy.start()”调用重新连接。


要运行它们:

```
-bash$pip install-r requirements-dev.txt
-bash$behave features/
````

测试使用busybox
容器作为测试夹具,因此不会太重。

步骤定义在features/steps/

也有代码部分的单元测试,这些部分不是天生依赖于控制tty。要运行这些代码:

```
-bash$pip install-r requirements-dev.txt
-bash$py.test tests/
````

pr需要在我合并之前通过这个构建。

-travis ci build:https://travis ci.org/d11wtq/dockerpy

在终端中,stdin、stdout和stderr三个文件描述符都连接到控制终端(tty)。当你把“tty=true”标志传递给Docker的“create_container()”时,Docker会在容器stdin所在的容器(pty)内分配一个假tty,stdout和stderr都已连接。


Docker API提供了一种访问连接到PTY的三个套接字的方法。
如果可以访问主机系统的TTY文件描述符和容器的PTY文件描述符,则只需在主机和容器之间“管道”将数据写入这些文件的描述符就可以了。这样做使得用户的
终端有效地成为容器内部的伪终端。
BR/>在实际中比这更复杂一些,因为必须小心到
将主机终端放进RAW模式(其中键入,如Enter不是BR/>具有任何特殊含义的解释),并在退出时恢复它。此外,必须使
容器的stdout和stderr流以及'sys.stdin'不阻塞,以便它们可以与's一起使用elect()`不阻塞主进程。这些属性在退出时恢复。
>BR/>不能通过发送数据到STDIN来控制终端的大小,并且只能由终端程序本身控制。由于伪终端
在真实终端内运行,因此pty的大小必须保持与呈现tty的大小相同。因此,docker提供了一个api
调用来调整分配的pty的大小。sigwinch处理程序用于检测窗口
大小更改,并根据需要调整伪终端的大小。


\contributors

-primary author:[chris corbyn](https://github.com/d11wtq)
-collaborator:[daniel nefin](https://github.com/dnephin)
-contributor:[stephen moore](https://github.com/delfick)
-撰稿人:[Ben Firshman](https://github.com/bfirsh)


\copyright&;licensing

copyright&;copy;2014克里斯•科尔宾。有关详细信息,请参见license.txt文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将springboot war部署到debian jetty8   java破坏了函数,即使它看起来是正确的   当MockMvc不可自动编译时,java会有选择地从Spring Security向其应用单个过滤器   java AndroidStudio每秒播放n次生成的声音   JavaJBossSeam:继承的方法被拦截了吗?   ScheduledExecutorService中线程默认名称中池号的java含义   在Java中用递归方法实现类Fibonacci的递归   java虚拟路径/文件夹   java即时与ZoneDateTime。转换到另一时区   用GaussLegendre算法在java中逼近Pi   java RecyclerView findFirstVisibleItemPosition()返回1   java根据当前经过身份验证的用户的角色返回不同的JSON对象   java从内部类访问扩展类的方法   Android程序中的Java语法WRT静态方法   可选参数初始化Java字符串文字时出错