从期望脚本导出数据
Posted
技术标签:
【中文标题】从期望脚本导出数据【英文标题】:Exporting data from expect script 【发布时间】:2014-05-28 08:28:46 【问题描述】:所以我编写了一个简短的期望脚本,它通过 telnet 登录到 APC 配电单元界面并轮询当前的安培。
#!/usr/bin/expect
set ip "192.168.0.1"
set username "myusername"
set password "mypassword"
spawn "/bin/bash"
send "telnet $ip\r"
expect "*User Name*"
send "$username\r"
expect "*Password*"
send "$password\r"
expect "*APC*"
send -- "phReading all current\r"
expect "*Success*"
send "quit\r"
expect eof
脚本完成了它的工作,我在屏幕上看到了放大器,显示如下:
apc>phReading all current
E000: Success
1: 7.5 A
apc>quit
我需要做的是将 7.5 数字“导出”到文本文件或将其作为变量传递给 bash 脚本。
关于我如何做到这一点的任何想法?
谢谢!
【问题讨论】:
【参考方案1】:Expect 是 TCL 的扩展,因此您可以访问 TCL 的所有构造。
如果我是你,我会让期望脚本直接写入文件。
请参阅此处的“编写文件”部分:http://wiki.tcl.tk/367。它有一个简单的例子。在您的情况下,您需要打开文件以进行追加(a)而不是写入(w)。
打开命令文档:http://www.tcl.tk/man/tcl8.6/TclCmd/open.htm
让我知道这对你有什么作用。
【讨论】:
谢谢詹姆斯!我在相关位置向我的脚本添加了 set filename、set fileId 和 close 命令。输出文件已创建,但仍为空。我可以看到我需要使用“puts”将文本放入文件中,但我不确定如何告诉它我想要此命令的输出 - 发送“phReading all current\r” - 到文件。有任何想法吗? :) 发送命令后,您需要期待一些结果。使用 -re 开关并为要匹配的内容设置正则表达式。然后,假设您确实获得了匹配项,您将能够使用具有正确文件 ID 和 $expect_out (0,string) 变量的“puts”,该变量将保存与您的 expect -re 语句匹配的输出部分。您可能还希望将 'exp_internal 1' 放在靠近脚本开头的某个位置,以获得对期望匹配操作的有价值的诊断。以上是关于从期望脚本导出数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 脚本从节点导出器指标获取 CPU、内存、磁盘数据