有哪些优于基于TCL的Expect的其他解决方案/语言?
我对Expect(TCL)能自动化很多我平时做不到的事情感到很惊讶。
我本来想通过看书更深入了解Expect,但在这之前我想问问有没有其他的解决方案或语言也能做到Expect能做的事情?
比如,我听说有人把Expect和Awk还有Perl做比较。
Awk和Perl能做到同样的事情吗?
那像Python和Ruby这样的语言呢?
Expect是公认的自动化工具吗,还是说还有其他更优秀的解决方案或语言?
4 个回答
ajsie问:“你说的还有哪些自动化工具?”
我来回答一个不同的问题:“你心里想的还有哪些场景?”答案是:任何一种互动环境,除了标准输入输出的那种。举个例子,Expect并不是用来自动化图形界面上的点击操作的。此外,Expect也不适用于Windows下的非控制台应用程序,尽管它们看起来像是字符界面的(这种应用确实存在)。
一个令人兴奋的反思是:Expect实际上是用来自动化一些奇怪设备的,这些设备可以通过类似终端的连接进行控制。如果你的柴油发动机(或者更常见的,电信设备)说可以通过连接一个类似telnet的进程来监控(即使是通过老式的串口线),那么你就进入了Expect能够发挥作用的领域。
可以看看这个链接,里面介绍了Perl语言中的一个叫做Expect的工具。
事情还有更多的细节。
直接说,最初的Expect——也就是Tcl Expect——是最好的。它在处理“交互”和各种伪终端(pty)方面的表现,比后来的任何版本都要好。它在这方面没有对手。
不过,同时,大多数使用Expect的人其实只用到了Expect功能的一小部分,所以这种技术上的优越性对他们来说并不重要。在几乎所有情况下,我会建议从Perl转过来的人使用Expect.pm,而熟悉Python的人则可以使用Pexpect,等等。
把Perl和“……Awk还有Perl”简单比较是不准确的。
从整体上看,所有常见的脚本语言——Lua、awk、sh、Tcl、Ruby、Perl、Python等等——其实差不多。Expect在这个共同的基础上,稍微但非常有效地扩展了对伪终端的支持(这里还有更多的细节我们暂时可以不提)。大致来说,如果你的自动化任务需要输入一个看不见的密码,那你就需要Expect。而Awk和Perl并没有内置这个功能。
还有其他适用于不同场景的自动化工具。