如何用Java挂钩系统级?

时间:2016-04-06 11:40:25

标签: java tcl expect telnet jacl

另请参阅有关此主题的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应用程序。

**

http://wiki.tcl.tk/1215

但是,图书馆有一段时间没有被触及过。我不太确定它的效果如何。我不知道它是否支持expect之类的任何内容,看起来似乎没有维护各种expect次尝试。

Donal Fellows的答案很可能是没有真正的解决方案,这是正确的。但是,可能只能使用这个tcl库来启动telnet会话,调用真正的telnet,而不是使用流程构建器,但这是非常试探性的。

3 个答案:

答案 0 :(得分:1)

  

有什么机制可以用Java挂钩,或用Java期望?

没有。问题在于,期望做一些非常复杂的低级事情来管理伪终端并且使用JRE不会暴露的OS接口。 (如果你在Windows上使用系统调试API,那就更加棘手了。)你必须用本机代码去做令人讨厌的事情。

简单的方法是通过ProcessBuilder将expect作为子流程运行。

答案 1 :(得分:1)

据我所知,Swig可以帮助您更好地连接这两种语言。如果我错了,请告诉我

答案 2 :(得分:1)

我创建了另一个实现交互循环的Java期望库ExpectIt(未在维基百科中列出)。看看this example