赞
踩
在本篇文章中,我们将逐一讲解以下内容:
- 如何通过 python 来模拟终端的键盘输入
- 如何控制 docker 中的终端
- 为了防止终端意外关闭,如何使用 tmux 来管理终端
在最近的工作中我遇到一个十分棘手的问题,就是我需要在测试自动化中使用他人开发的一个【命令行工具】
这个【命令行工具】使用方法需要我在程序开始运行后,通过键盘输入一些选项才能运行,而不是一行命令直接运行,因此无法直接使用 os 模块来让【命令行工具】直接工作,所以想让这样一个工具自动化便成了一个困扰我多日的问题
通过查阅大量的资料,发现其实可以通过 python 来控制某个终端,来模拟用户的键盘输入。现在让我们进入正文
实现方法大概分为一下几步
大概的图示如下,看不懂没有关系,下面有每一步的详细解释
首先打开一个终端,并输入 ps
,在 TTY 这一列会标志每条进程所属的【终端编号】。通常我们看 bash
或·zsh
的进程所属终端,即为当前的终端。所以如图所示,我目前的终端是 ttys001
在 Linux 系统中,每打开一个终端,便会在系统的 /dev
目录下新建一个带有【终端编号】的文件,如 /dev/ttys001
这个文件表示一个串行终端设备。
在这里我们只需要知道 /dev/ttys001
代表了当前的终端即可
这里直接上代码,十分好理解
# 这里我们使用 open 打开了该终端(写模式)
# 得到了终端的文件描述符 file descriptor,即 fd
fd = open('/dev/ttys001', 'w')
首先贴入完整代码,看不懂没关系,之后会逐行解释
import fcntl import termios terminal = "/dev/ttys001" def terminal_exec(terminal: str, cmd: str): """Execute cmd in the specific terminal Args: terminal (str): the terminal you would like to control cmd (str): command line, such as 'ls' """ with open(terminal, "w") as fd: for c in "{}\n".format(cmd): fcntl.ioctl(fd, termios.TIOCSTI, c) terminal_exec(terminal, "ls")
在上面的 terminal_exec 函数中,我们首先用 with open(...) as fd
打开了终端,并获取到了文件描述符
然后这段代码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。