1. 首页 > 智能数码 >

windows版expect expect和hope的区别

pexpect 跨平台(WIN、LINUX)简明教程

详细的内容可以参考下面的参考文档,下面的内容主要是为网络设备运维人员使用的pexpect 跨平台简明教程。

windows版expect expect和hope的区别windows版expect expect和hope的区别


Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况。

pexpect是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。它可以用来实现与ssh, ftp, telnet等程序的自动交互。

send命令后执行结果内容保存在buffer中,这时child.expect('keyword')后,child.before即为“keyword”之前的字符串,child.after即为匹配的”keyword”字符串。

command的执行结果都保存在一个buffer中,每次执行expect时都从buffer中开始检查匹配的pattern,如果找到了匹配的pattern,则所有在匹配处之前的内容都从buffer中清除。

(这边没有看明白也没有关系,可以看后面的实践篇例子)

通常维护人员有的偏向于用WIN系统,有的偏向于LINUX系统。所以前期团队希望形成一个统一框架的时候就出现了一个难题。框架如何适用于不同的系统。

LInux系统pexpect包,win系统前期尝试使用winpexpect,但是程序改动很大,并没有调试成功。

如何在WIN系统使用python的pexpect包很难找到相关资料,某乎上都是类似的疑问没有解答。

团队成员增加后,终于有了新的思路 , 团结就是力量 。

通过这个模块进行不同系统的适配。

将plink.exe装在python的文件夹在python的安装目录下,win系统可以同样使用pexpect模块

参考信息1:Pexpect 文档 New in version 4.0: Windows support。Pexpect can be used on Windows to wait for a pattern to be produced by a child process, using [ pexpect.popen_spawn.PopenSpawn ]

参考信息2:PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。plink是可以独立使用的exe实现形式,可以让我们直接在命令行制定好命令,然后执行,完成后自动关闭session。ssh是一个安全通道协议。plink是这个通道协议的一个实现 [图片上传中...(-572001-1587612890428-0)]

从文档来看,

sendline() 和 send() 的区别就是在发送的字符串后面加上了回车换行符,这也使它们用在了不同的地方:

只需要发送字符就可以的话用send()

如果发送字符后还要回车的话,就用 sendline()

但是在调测过程中,WIN系统下命令输入后,child.before始终得不到预想中的结果。

经过逐步排查,发现在WIN系统下只能使用send() ,如果使用sendline() ,次交互没有问题,后续交互就开始问题。

WIN系统下child.before输出为b'byte型,做判断时要转为str型。具体可以参考面一篇讲编码类型的文章,讲的很详细。

例子1

send Username后,child.before一直到'Tac_Userna',child.after为‘me:’,child.buffer为空。

expect关键字assword:后,child.before回显一直到keyword之前,child.after为keyword,child.buffer为空。

例子2

下发command命令,child.before维持原来的不变,expect到keyword以后,child.before变为下发command命令后的设备回显。

参考文档

文档

探索Pexpect

Pexpect示例及使用Tips

Python Pexpect模块讲解

Pexpect模块使用说明

windows下使用plink实现全自动登陆ssh

Python3_字符编码

expect中用send发送if语句

char SendCmdBuf;//发送命令缓冲区

if(SendCmdBuf)

{delete[] SendCmdBuf;

SendCmdBuf=NULL;

}题if面括号用该bool型变量吧if(SendCmdBuf)意思呢

If optEnter.select Then '表达式能值

System.Windows.Forms.SendKeys.Send("{enter}")

Else

System.Windows.Forms.SendKeys.Send("^{enter}")

End If

请问该何修改

char SendCmdBuf;//发送命令缓冲区

if(SendCmdBuf)

{delete[] SendCmdBuf;

SendCmdBuf=NULL;

}题if面括号用该bool型变量吧if(SendCmdBuf)意思呢

If optEnter.select Then '表达式能值

System.Windows.Forms.SendKeys.Send("{enter}")

Else

System.Windows.Forms.SendKeys.Send("^{enter}")

End If

windows expect怎么使用

你是说shell的expect么,我有个ssh自动登录的脚本,你看下1. [#!/usr/bin/expect]

2. [set timeout 30]

基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒

3. [spawn ssh -l username 192.168.1.1]

spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个 或 dir.exe 的可执行文件。

它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

4. [expect "password:"]

这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒

5. [send "ispass\r"]

这里就是执行交互动作,与手工输入密码的动作等效。

温馨提示: 命令字符串结尾别忘记加上 “\r”,如果出现异常等待的状态可以核查一下。

6. [interact]

执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行

windows怎么安装tcl和expect

TCL电脑分区无效,无法安装系统 【发现故障】学校有一批TCL精鼎B7400型号的台式机,昨天有一台需要重新安装xp作系统,设置好从光驱启动,能够正常读入安装文件,但是系统拷贝完成重启后,出现蓝屏或无法进入系统。尝试了ghost版和安装版都无效。重新分区还发现分区无效。 【故障解决】初步判断系统安装有还原工具,查询资料发现是“TCL网管”作祟,说明书中没有写明如何安装系统和卸载"TCL网管”,经过两天时间的“艰苦”摸索,现在把过程总结如下: 1、开机按“home”进入“TCL网管”的控制界面,管理员初始密码为12345678. 选择“卸载”、“恢复到近保存”(应该是这个名称,记得不大清楚了,选择不恢复好像卸载不掉). 2、重新开机,按“DEL”键进入CMOS设置,选择“Advanced — onboard devices configuration — saming restore card — disabled( enabled是开启)”关闭电脑的还原卡,保存退出。 3、现在可以安装系统了。

关于Windows下使用expect乱码的问题

Windows下解释执行的脚本语言:简单网络管理语言(Simple Network Management Language)是一种类自然语言的脚本语言,它采用snmp、telnet、ping、dns、arp、ssh、tcp、udp、web等协议访问网络设备,内置tp协议用于告警等邮件的发送,支持excel、mysql、sqlite等3种方式进行网管数据的存取。

换个日文的作系统,肯定好使,到时候就是中文的用着费劲点,看你怎么取舍了,刚出来的系统兼容性都不好不用那么急着用,等个半年左右,等他成熟了再换回来用w7吗,现在个人感觉就xp实用,别的都是花瓶

0002_windows程序出现乱码的解决方案之一

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息