Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况。因为这种情况特别多而且繁琐,所以很多语言都有各种自己的实现。最初的第一个 Expect 是由 TCL 语言实现的,所以后来的 Expect 都大致参考了最初的用法和流程,整体来说大致的流程包括:
运行程序
程序要求人的判断和输入
Expect 通过关键字匹配
根据关键字向程序发送符合的字符串
TCL 语言实现的 Expect 功能非常强大,我曾经用它实现了防火墙设备的完整测试平台。也因为它使用方便、范围广,几乎所有脚本语言都实现了各种各样的类似与Expect的功能,它们叫法虽然不同,但原理都相差不大
pexpect 是 Python 语言的类 Expect 实现。
spawn() 方法用来执行一个程序,它返回这个程序的操作句柄,以后可以通过操作这个句柄来对这个程序进行操作。
from time import sleep
import pexpect
import sys
from pexpect.popen_spawn import PopenSpawn
child = pexpect.popen_spawn.PopenSpawn('ssh [email protected]')
logFileId = open("logfile.txt", 'wb')
child.logfile = logFileId
child.expect('password')
child.sendline('password')
child.expect('root')
child.sendline('ls /')
child.expect('root')
child.sendline('exit')
index = child.expect(pexpect.EOF)
if index==1:
child.sendline("exit")
child.expect(pexpect.EOF)
print('this ip has exists in know_host files!')
pxssh类:为建立SSH连接定制了一些功能
from pexpect.pxssh import pxssh
hostname = '172.17.2.117'
user = 'ginvip'
password = 'ginvip'
s = pxssh()
s.login(hostname, user, password)
s.sendline('ip addr')
s.prompt()
print(s.before)
s.logout()
from time import sleepimport pexpectimport sysfrom pexpect.popen_spawn import PopenSpawnchild = pexpect.popen_spawn.PopenSpawn('ssh [email protected]')# a = child.expect(':')# print(a)logFileId = open("logfile.txt", 'wb')child.logfile = logFil
文章目录说明API结构核心组件创建Spawn方法Controlling the child processrun functionExceptionsUtility Functionsfdpexpectpopen_spawnreplwrappxssh基本用法重要方法
文档参考(翻译)自官方文档(地址),加入了一些我在使用过程中的心得体会。间略了我认为不重要的内容。间略了我不懂的内容。水平有限...
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('服务器IP', port=22, username='用户名', password='密码')
stdin, stdout, stderr = ssh.exec_command('要执行的命令')
print(stdout.read().decode('utf-8'))
ssh.close()
其中,需要安装 `paramiko` 模块。在代码中,首先创建一个SSHClient对象,然后设置SSH主机密钥策略,连接远程主机,执行命令,最后关闭连接。你需要将 `服务器IP`、`用户名` 和 `密码` 替换为实际值,并修改 `要执行的命令` 为你需要执行的远程命令。