如何使用 Java 连接到系统级 expect?

how to hook into system level expect with Java?

另请参阅关于此主题的更具体的 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 连接到 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 is a Tcl 8.x interpreter written in Java. You can script your Java applications in Tcl.

**

http://wiki.tcl.tk/1215

但是,图书馆已经有一段时间没有动过了。我不太确定它的效果如何。我不知道它是否支持 expect 之类的东西,看起来各种 expect 尝试都没有得到维护。

很可能 Donal Fellows 的回答是正确的,即没有真正的解决方案。但是,可能只能使用此 tcl 库来启动 telnet 会话,调用真正的 telnet,而不是使用进程构建器,但这只是暂时的。

What mechanisms are available to either hook into expect with Java, or into Java with expect?

None真的。问题是 expect 做了一些非常复杂的低级事情来管理伪终端,并且使用 JRE 不公开的 OS 接口。 (如果你在 Windows 上,它使用系统调试 API,那就更棘手了。)你必须去用本地代码做一些讨厌的事情。

最简单的方法是 运行 期望通过 ProcessBuilder.

作为子流程

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

我已经创建了另一个 Java expect 库 ExpectIt (not listed in Wikipedia) which implements interact loop. Have a look at this example