另请参阅有关此主题的better question更具体的内容。
我只是discovered期望的,一种基于tcl的脚本语言,用于自动化,特别是telnet连接:
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挂钩,或用Java期望?是的,有http://tcljava.sourceforge.net/以及其他一些,但它们似乎已经过时了。
如果在Java中有一个tcl实现,为什么不这样,那我的确可以。但是,我推断,由于缺乏对网页的更新,没有任何东西可以完全实现......
维基百科说:
爪哇
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,但是它们会互动。是否有用于在两者之间传递消息的钩子或机制?
----------------------------------------------- ------------ ---------- UPDATE
**
Jacl是一个用Java编写的Tcl 8.x解释器。你可以编写脚本 Tcl。中的Java应用程序。
**
但是,图书馆有一段时间没有被触及过。我不太确定它的效果如何。我不知道它是否支持expect
之类的任何内容,看起来似乎没有维护各种expect
次尝试。
Donal Fellows的答案很可能是没有真正的解决方案,这是正确的。但是,可能只能使用这个tcl库来启动telnet会话,调用真正的telnet,而不是使用流程构建器,但这是非常试探性的。
答案 0 :(得分:1)
有什么机制可以用Java挂钩,或用Java期望?
没有。问题在于,期望做一些非常复杂的低级事情来管理伪终端并且使用JRE不会暴露的OS接口。 (如果你在Windows上使用系统调试API,那就更加棘手了。)你必须用本机代码去做令人讨厌的事情。
简单的方法是通过ProcessBuilder
将expect作为子流程运行。
答案 1 :(得分:1)
据我所知,Swig
可以帮助您更好地连接这两种语言。如果我错了,请告诉我
答案 2 :(得分:1)
我创建了另一个实现交互循环的Java期望库ExpectIt(未在维基百科中列出)。看看this example。