我对 Expect (TCL) 可以自动完成很多我通常无法做到的事情感到惊讶。
我认为我可以通过阅读一本书来更深入地了解 Expect,但在我这样做之前,我想问一下是否有其他解决方案/语言可以做 Expect 的工作?
例如。我读过人们将 Expect 与 Awk 和 Perl 进行比较。
Awk 和 Perl 可以做同样的事情吗?
Python 和 Ruby 等其他语言呢?
Expect 是事实上的自动化工具,还是有其他更优越的解决方案/语言?
还有更多。
坦率地说,最初的 Expect——Tcl Expect——是最好的。它比它的任何继任者都更好地支持“交互”和各种 pty 怪癖。它没有上级,因为它所做的。
然而,与此同时,大多数 Expect 用户只利用了 Expect 功能的一小部分,以至于这种技术优势对他们来说是无关紧要的。在几乎所有情况下,我建议来自 Perl 的人使用 Expect.pm,熟悉 Python 的人使用 Pexpect,等等。
将 Perl 与“... Awk and also Perl”进行天真的比较是没有根据的。
概括地说,所有常见的脚本语言——Lua、awk、sh、Tcl、Ruby、Perl、Python……——都差不多。Expect 稍微但非常有效地将这个共同核心向 pty-awareness 方向扩展(我们暂时可以忽略这个故事的更多内容)。粗略地说,如果您的自动化涉及输入一个不可见的密码,那么您需要 Expect。awk 和 Perl 不内置此功能。
还有其他适用于其他环境的自动化工具。
查看Perl 的Expect
ajsie 问道:“您还在谈论哪些其他自动化工具?”
我将回答一个不同的问题:“我还想到了哪些其他情况”?答案是:除了标准输入输出之外的任何交互环境。例如,Expect 不适用于 GUI 的点击自动化。Expect 也不适用于 Win* 非控制台应用程序,即使它们看起来好像是面向字符的(这样存在)。
一个令人兴奋的反实现:Expect是用于允许通过类似术语的连接进行控制的古怪设备的自动化。如果您的柴油发动机(或者更常见的是电信铁)表示可以通过连接类似 telnet 的进程(例如,甚至通过旧式串行线路)对其进行监控,那么您处于 Expect 有机会的领域发挥它的魔力。
查看Python的Pexpect