【发布时间】:2016-07-26 19:03:46
【问题描述】:
另请参阅better question,更具体地了解此主题。
我刚刚discoveredexpect,一种基于 tcl 的脚本语言,用于自动化远程登录连接等:
thufir@mordor:~/NetBeansProjects/expect$
thufir@mordor:~/NetBeansProjects/expect$ expect example rainmaker.wunderground.com 3000
spawn telnet rainmaker.wunderground.com 3000
Trying 38.102.137.140...
Connected to rainmaker.wunderground.com.
Escape character is '^]'.
------------------------------------------------------------------------------
* Welcome to THE WEATHER UNDERGROUND telnet service! *
------------------------------------------------------------------------------
* *
* National Weather Service information provided by Alden Electronics, Inc. *
* and updated each minute as reports come in over our data feed. *
* *
* **Note: If you cannot get past this opening screen, you must use a *
* different version of the "telnet" program--some of the ones for IBM *
* compatible PC's have a bug that prevents proper connection. *
* *
* comments: jmasters@wunderground.com *
------------------------------------------------------------------------------
Press Return to continue:usage: send [args] string
while executing
"send – – “\r”"
(file "example" line 9)
thufir@mordor:~/NetBeansProjects/expect$
有哪些机制可以使用 Java 连接到 expect 中,或者使用 expect 连接到 Java 中?是的,有http://tcljava.sourceforge.net/ 以及其他一些,但它们似乎已经过时了。
如果在 Java 中有一个 tcl 实现,为什么不,那会起作用,我敢肯定。但是,我推断,由于网页缺乏更新,没有任何东西可以完全实现......
维基百科说:
Java
expect4j — an attempt at a Java clone of the original Expect
ExpectJ — a Java implementation of the Unix expect utility
Expect-for-Java — pure Java implementation of the Expect tool
不过,expect4j 说这是一种尝试,ExpectJ 自 2010 年以来就没有改变过,Expect-for-Java 也有好几年没碰过。
如果这些库被使用并正常运行,我很抱歉,但日期表明它们没有得到维护。
我宁愿单独使用expect和Java,但是让它们交互。两者之间是否有挂钩或机制来传递消息?
----------------------------------- ------------更新---------
**
Jacl 是用 Java 编写的 Tcl 8.x 解释器。你可以编写你的脚本 Tcl 中的 Java 应用程序。
**
但是,图书馆已经有一段时间没有人动过了。我不太确定它的效果如何。我不知道它是否支持expect 之类的东西,看起来各种expect 尝试都没有得到维护。
Donal Fellows 的回答很可能是正确的,即没有真正的解决方案。但是,可能只是可以使用这个 tcl 库来启动一个 telnet 会话,调用真正的 telnet,而不是使用进程构建器,但这是非常初步的。
【问题讨论】:
-
在这里定义“交互”? 究竟你想从java中做什么?期待什么?你需要他们如何“互动”?
-
挂钩,在它们之间传递消息。如何将消息从期望传递给 Java 程序,反之亦然?另请参阅stackoverflow.com/questions/15143619/…,了解具有不同解决方案的类似问题(ssh 与 telnet 不同)。
-
您想使用
expect自动化telnet连接吗?您想从expect控制Java 应用程序吗?您想让 java 查看telnet连接的内容吗?你想写expect-like 逻辑 in java? -
类似的东西。 Java 不能很好地与 telnet 挂钩。从wiki.tcl.tk/1215 看来这是可行的,尽管我刚刚开始阅读文档。似乎
expect更好地驱动或连接到 telnet(可能是因为 tcl 派生自 ?c?)。我想用Java制作大部分程序,只需使用tcl建立连接即可。 -
expect不会“挂钩”任何东西。它充当输入和输出设备(通过伪装成某种终端),然后通过“预期”某些输出并提供脚本输入来“驱动”衍生的应用程序。而已。您不必需要期望它恰好存在并做好它的工作。如果你想打扰,你可以自己做。
标签: java tcl expect telnet jacl