如何测试tty?

问题描述

我们正在尝试容器化我们的应用程序。结果,数据库将很快成为容器,它将成为网桥网络的一部分。该网络上的容器可以轻松访问数据库端口。但是无法从网络外部访问这些端口。现在,我当然可以发布所有端口,但是这有点违反了桥接网络的目的,我也可以在主机网络上运行它们。因此,我试图避免这种情况。

但是仍然需要不时对数据库执行一些维护任务。例如。创建新的表格/索引等。

我当前的策略是编写一个带有connect命令的命令行工具。此connect命令使用如下的dockerfile构建一个Docker容器:

FROM python:3.8

workdir /tmp
copY requirements.txt setup.py ./
RUN pip3 install -r requirements.txt \
    && rm /tmp/*

RUN mkdir /app
workdir /app

copY . .

RUN pip3 install -e .

ENTRYPOINT [ "/bin/bash" ]

因此它将导入项目并使用pip进行安装。然后,它以交互模式运行此docker容器(还将安装配置并将其连接到此connect命令的参数所指定的网络。

所以当我跑步

manage connect my_net

我被扔到连接到my_net且已安装CLI manage的容器中。这使我可以运行一次性命令(脚本)来管理该网络上的数据库

问题是:我应该如何为此编写测试?

我使用click构建CLI,因此可以使用CliRunner调用命令。但是,如何处理由docker run命令的-it标志引发的tty,该标志由connect函数使用os.system调用

我想将更多命令传递给该tty并观察输出。有没有办法以某种方式将tty捕获为python对象?我唯一发现的是这个https://docs.python.org/3/library/pty.html,它似乎没有用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)