探索 Pexpect,第 2 部分:Pexpect 的实例分析
2009-08-29 00:00:00 来源:WEB开发网logout方法
logout (self):
发送'exit'给远程 ssh 主机,如果有 stopped jobs,会发送'exit'两次。
例 5:telnet 的使用
本例实现了如下功能:telnet 登录到某远程主机上,输入命令“ls -l”后,将子程序的执行权交还给用户,用户可以与生成的 telnet 子程序进行交互。
清单 6. telnet 的例子代码
#!/usr/bin/env python
import pexpect
# 即将 telnet 所要登录的远程主机的域名
ipAddress = 'develperWorks.ibm.com'
# 登录用户名
loginName = 'root'
# 用户名密码
loginPassword = 'passw0rd'
# 提示符,可能是’ $ ’ , ‘ # ’或’ > ’
loginprompt = '[$#>]'
# 拼凑 telnet 命令
cmd = 'telnet ' + ipAddress
# 为 telnet 生成 spawn 类子程序
child = pexpect.spawn(cmd)
# 期待'login'字符串出现,从而接下来可以输入用户名
index = child.expect(["login", "(?i)Unknown host", pexpect.EOF, pexpect.TIMEOUT])
if ( index == 0 ):
# 匹配'login'字符串成功,输入用户名.
child.sendline(loginName)
# 期待 "[pP]assword" 出现.
index = child.expect(["[pP]assword", pexpect.EOF, pexpect.TIMEOUT])
# 匹配 "[pP]assword" 字符串成功,输入密码.
child.sendline(loginPassword)
# 期待提示符出现.
child.expect(loginprompt)
if (index == 0):
# 匹配提示符成功,输入执行命令 'ls -l'
child.sendline('ls -l')
# 立马匹配 'ls -l',目的是为了清除刚刚被 echo 回显的命令.
child.expect('ls -l')
# 期待提示符出现.
child.expect(loginprompt)
# 将 'ls -l' 的命令结果输出.
print child.before
print "Script recording started. Type ^] (ASCII 29) to escape from the script
shell."
# 将 telnet 子程序的执行权交给用户.
child.interact()
print 'Left interactve mode.'
else:
# 匹配到了 pexpect.EOF 或 pexpect.TIMEOUT,表示超时或者 EOF,程序打印提示信息并退出.
print "telnet login failed, due to TIMEOUT or EOF"
child.close(force=True)
else:
# 匹配到了 pexpect.EOF 或 pexpect.TIMEOUT,表示超时或者 EOF,程序打印提示信息并退出.
print "telnet login failed, due to TIMEOUT or EOF"
child.close(force=True)
- ››探索 ConcurrentHashMap 高并发性的实现机制
- ››探索Asp.net mvc 的文件上传(由浅入深)
- ››探索博客发展之路:给博客一个明确的定位
- ››部分 WM6.5 手机有望升级到 Windows Phone 7
- ››探索 Eclipse JDT 中的重构功能
- ››探索 Eclipse 的 Ajax Toolkit Framework
- ››探索 Eclipse V3.1 的新特性:更高的可用性、更广...
- ››探索 Flex 和 CSS 的强大功能
- ››探索 Pexpect,第 1 部分:剖析 Pexpect
- ››探索 Pexpect,第 2 部分:Pexpect 的实例分析
- ››部分英特尔芯片不支持Windows 7“XP模式”
- ››探索 AIX 6:在 AIX 6 上配置 iSCSI Target
更多精彩
赞助商链接