python3.8实现自动化交互程序

软件库 9206 0
一、基本介绍
在Pexpect中有两种重要的方法– expect() 和 send()(或 sendline() 类似于send() 方法+ \n,就是可以换行)。

该 expect() 方法等待应用程序返回给定的字符串。
指定的字符串是一个正则表达式,因此可以匹配复杂的模式
该 send() 方法将字符串写入子应用程序。从子应用程序的角度来看,就像有人在终端上键入文本一样

每次调用 expect() 后, 子应用程序的 before 和 after 属性将被设置可以被打印的文本。该 before 属性将包含子应用程序返回所有文本,直到匹配上期望的字符串模式为止。该 after 字符串将包含与预期模式匹配的文本。match 属性设置为 re match对象。

执行一个创建密钥对的命令

[test@VM-0-11-centos ~]$ ssh-keygen
Generating public/private rsa key pair.
enter file in which to save the key (/root/.ssh/id_rsa):

使用模块 pexpect 尝试捕获响应的字符串

In [1]: import pexpect

In [2]: child = pexpect.spawn("ssh-keygen")

In [3]: child.expect("/root/.ssh/id")
Out[3]: 0

In [4]: child.before
Out[4]: b'Generating public/private rsa key pair.\r\nenter file in which to save the key ('

In [5]: child.after
Out[5]: b'/root/.ssh/id'

实例演示

删除或者移动已经有的 密钥

面的指令是先测试是否存在 .ssh 目路,如果存在则改名,防止已经建立的信任关系失效

test -d ~/.ssh && mv ~/.ssh ~/myssh

In [1]: import pexpect

In [2]: cmd = "ssh-keygen"

In [3]: child = pexpect.spawn(cmd) // 执行 shell 命令生成程序

// 捕获程序输出的字符串, 因为 ) 会被 python 识别解释,所以这里使用了 [)]
In [4]: child.expect(".ssh/id_rsa[)]")
Out[4]: 0

// 根据程序需要发送进一步的指令
// 这里是直接输入一个回车键,相当于按下了回车键
In [5]: child.sendline()
Out[5]: 1

// 继续捕获
In [6]: child.expect("no passphrase.:")
Out[6]: 0

// 这里是打印出了匹配模式之前输出内容不是必须操作
// 只是进行简单验证程序输出内容而已
In [7]: child.before
Out[7]: b": \r\nCreated directory '/home/test/.ssh'.\r\nenter passphrase (empty for "

// 这里是输出的字符串中,匹配到的那部分字符串
In [8]: child.after
Out[9]: b'no passphrase):'

In [9]: child.sendline()
Out[9]: 1

In [10]: child.expect("again:")
Out[10]: 0

In [11]: print(child.before.decode()+child.after.decode())

enter same passphrase again:

In [12]: child.sendline()
Out[12]: 1

In [13]: child.close()

In [14]: !ls .ssh
id_rsa id_rsa.pub

In [15]:

额外的小方法

对于创建 ssh 的密钥对,其实可以使用如下的 shell 命令非交互式的创建自己密钥对, 上面的例子只是为了演示 pexpect 而已。

-N ""
1
1ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""

-

免责声明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件 f@if77.cn 与我们联系处理。敬请谅解!

上一篇当前文章已是最后一篇了

下一篇火柴人下降2