【问题标题】:how to hook into system level expect with Java?如何使用 Java 连接到系统级期望?
【发布时间】: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 应用程序。

**

http://wiki.tcl.tk/1215

但是,图书馆已经有一段时间没有人动过了。我不太确定它的效果如何。我不知道它是否支持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


【解决方案1】:

有哪些机制可以使用 Java 连接到 expect 中,或者使用 expect 连接到 Java 中?

真的没有。问题在于,expect 做了一些非常复杂的低级操作来管理伪终端,并且使用了 JRE 没有公开的 OS 接口。 (如果你在使用系统调试 API 的 Windows 上,那就更棘手了。)你不得不去用原生代码做一些讨厌的事情。

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

【讨论】:

  • 我会回到这个,ProcessBuilder
【解决方案2】:

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

【讨论】:

【解决方案3】:

我创建了另一个 Java 期望库 ExpectIt(未在 Wikipedia 中列出),它实现了交互循环。看看this example

【讨论】:

猜你喜欢
  • 2015-11-02
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 2020-09-26
  • 2015-11-18
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多