这是可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行的命令 autoexpect,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
autoexpect - 通过观看会话生成一个 Expect 脚本
概要
自动预期 [ ARGS [ 程序 参数... ]
引言
autoexpect 监视您与另一个程序的交互并创建一个 Expect 脚本
重现您的互动。 对于直线脚本,autoexpect 可以节省大量时间
手动编写脚本。 即使您是 Expect 专家,您也会发现它
方便使用 autoexpect 来自动化交互中更无意识的部分。 这是
将大量的自动预期脚本剪切/粘贴在一起比从它们中编写它们要容易得多
划痕。 如果你是初学者,你可能什么也学不到
更多关于 Expect 的内容而不是如何调用 autoexpect。
使用 autoexpect 的最简单方法是从命令行调用它,不带参数。
例如:
% 自动期望
默认情况下,autoexpect 会为您生成一个 shell。 给定程序名称和参数,
autoexpect 产生那个程序。 例如:
% autoexpect ftp ftp.cme.nist.gov
生成的程序运行后,正常交互。 当您退出外壳时
(或您指定的程序),autoexpect 将为您创建一个新脚本。 默认情况下,
autoexpect 将新脚本写入“script.exp”。 您可以使用 -f 标志覆盖它
后跟一个新的脚本名称。
以下示例运行“ftp ftp.cme.nist.gov”并存储生成的 Expect 脚本
在文件“nist”中。
% autoexpect -f nist ftp ftp.cme.nist.gov
重要的是要了解 autoexpect 不保证脚本可以工作,因为
它必然要猜测某些事情——有时它会猜错。
但是,通常很容易识别和修复这些问题。 典型问题
是:
· 时机。 数量惊人的程序(rn、ksh、zsh、telnet 等)
并且设备(例如,调制解调器)忽略在之后“太快”到达的击键
提示。 如果你发现你的新脚本在一个地方挂了,试着添加一个
上一次发送之前的短暂睡眠。
您可以通过覆盖变量来强制执行此行为
“force_conservative”在生成的脚本的开头附近。 这个
“保守”模式使自动预期自动暂停(十分之一
一秒钟),然后再发送每个字符。 这安抚了我所知道的每个程序
的。
如果您只想快速让自己放心,这种保守模式很有用
问题是时间问题(或者如果你真的不关心有多快
脚本运行)。 可以在脚本生成之前强制使用相同的模式
使用 -c 标志。
幸运的是,这些时间点很少见。 例如,telnet 忽略
只有在输入其转义序列后才能使用字符。 调制解调器只忽略
字符在第一次连接到它们后立即。 一些
程序一直表现出这种行为,但通常会切换到
禁用它。 例如,rn 的 -T 标志禁用此行为。
以下示例以保守模式启动 autoexpect。
自动期望 -c
-C 标志定义了切换保守模式的键。 下面的例子
以 ^L 作为切换启动自动期望(在非保守模式下)。 (注意
^L 是按字面输入的 - 即输入一个真正的控制-L)。
自动期望 -C ^L
以下示例以 ^L 作为保守模式启动 autoexpect
切换。
自动期望 -c -C ^L
· 回声。 许多程序回显字符。 例如,如果您在
shell,autoexpect 实际看到的是:
你输入了'm',
电脑输入'm',
你输入了“o”,
计算机输入“o”,
你输入了'r',
电脑输入'r',
...
没有具体的程序知识,就不可能知道你是否
在输入下一个字符之前,等待看到每个字符的回显。 如果自动期望
看到字符被回显,它假设它可以将它们作为一个组发送
而不是按照它们最初出现的方式交错它们。 这使得
剧本读起来更舒服。 但是,可以想象它可能是不正确的,如果
你真的不得不等待看到每个角色的呼应。
· 改变。 Autoexpect 记录脚本中交互中的每个字符。
这是可取的,因为它使您能够对
什么是重要的,什么可以用模式匹配代替。
另一方面,如果您使用的命令的输出因运行而异,
生成的脚本不会是正确的。 例如,“日期”
命令总是产生不同的输出。 所以在使用 date 命令时
运行 autoexpect 是生成需要编辑的脚本的可靠方法
为了让它工作。
-p 标志将 autoexpect 置于“提示模式”。 在这种模式下,autoexpect 将
只查找程序输出的最后一行——通常是
迅速的。 这可以处理日期问题(见上文)和大多数其他问题。
以下示例在提示模式下启动 autoexpect。
自动期望 -p
-P 标志定义了一个切换提示模式的键。 下面的例子开始
autoexpect(在非提示模式下)以 ^P 作为切换。 请注意,^P 是
字面输入 - 即输入一个真正的控制-P。
自动期望 -P ^P
以下示例以 ^P 作为切换在提示模式下启动 autoexpect。
自动期望 -p -P ^P
其他 旗帜
-安静的 标志禁用由 autoexpect 产生的信息性消息。
-Q flag 命名一个引号字符,可用于输入自动期望的字符
否则会消耗,因为它们被用作切换。
以下示例显示了一些带有引号的标志,用于提供一种输入方式
从字面上切换。
自动期望 -P ^P -C ^L -Q ^Q
风格
我不知道是否有针对 Expect 程序的“风格”,但 autoexpect 绝对应该
不被视为任何风格的典范。 例如,autoexpect 使用 Expect 的特性
专门用于计算机生成的脚本。 所以不要尝试
忠实地编写看起来好像是由 autoexpect 生成的脚本。 这不是
有用。
另一方面,autoexpect 脚本确实显示了一些有价值的东西。 例如,你
可以看到任何字符串必须如何被引用才能通过运行在 Tcl 脚本中使用它
通过自动期望的字符串。
使用 onworks.net 服务在线使用 autoexpect