从期望脚本导出数据

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' 放在靠近脚本开头的某个位置,以获得对期望匹配操作的有价值的诊断。

以上是关于从期望脚本导出数据的主要内容,如果未能解决你的问题,请参考以下文章

从 Webmatrix 导出 MySQL 数据库安装脚本

怎么导出Sql Server数据库表结构和数据的脚本

使用 Python 脚本从节点导出器指标获取 CPU、内存、磁盘数据

怎么从oracle导出数据到excel

使用 SSIS 脚本任务将数据从多个 SQL 表导出到不同的平面文件

如何使用sqlserver导出数据库脚本