【问题标题】:how to implement expect "interact" command using java如何使用java实现expect“interact”命令
【发布时间】:2015-08-21 20:22:31
【问题描述】:

我想使用 java 实现期望的“交互”命令。在预期中,可以打开一个 ssh 会话,进行身份验证,然后使用“交互”命令将控制权交还给用户。用java可以吗?我尝试过使用 expectJ、expect4J 和 expectForJava,但文档很少,几乎没有关于如何执行此操作的示例。 TIA。

更新:“交互”命令参考,请查看:http://wiki.tcl.tk/3914

"Interact 是一个 Expect 命令,用于控制当前 处理给用户,以便将击键发送到当前 进程,当前进程的stdout和stderr是 回来了。”

【问题讨论】:

  • @SergeyBenner 我在 expect4J 中找不到,从 Java 代码中,有人可以调用“交互”命令。 Expect 对象只有“expect”和“send”方法。 expectJ 确实有一个明确的,但它不起作用(或者我不知道如何正确使用它)。
  • @DaveJarvis 我想看看。您是从头开始编写的还是使用了任何现有的库?它有“交互”功能吗?
  • @LeonardoKenji:试试这个bitbucket.org/djarvis/jexpect
  • Expect 的 interact 是相当高的秘密酱规模。祝你好运! (它使用了 Unix 虚拟终端的许多更有趣的细节,以便将用户使用的终端连接到生成的应用程序所在的终端。它也很少实现,除非在原始版本中期待。)

标签: java unix tcl expect expectj


【解决方案1】:

如果有人感兴趣,我已经为 ExpectIt 添加了基本的交互式循环支持,这是我自己的开源 Expect for Java 实现(抱歉自我推销),从 0.8 版开始。

这是一个example在Java 8中与系统输入流交互:

        try (final Expect expect = new ExpectBuilder()
                .withInputs(System.in)
                .build()) {
            expect.interact()
                    .when(contains("abc")).then(r -> System.out.println("A"))
                    .when(contains("xyz")).then(r -> System.err.println("B"))
                    .until(contains("exit"));
            System.out.println("DONE!");
        }
        System.in.close();

【讨论】:

  • 嗨,Alexey - 非常感谢 expectit - 目前正试图让交互工作。本例中的“r”是什么?
  • @JonA 'r' 是一个 lambda 函数参数。尝试使用完整的示例:github.com/Alexey1Gavrilov/ExpectIt/blob/master/expect-java8/…
  • 我正在使用 maven 依赖项,包含没有为我解决.. 为什么想法?
  • @Udhaya 您要使用哪个版本?这对我有用 net.sf.expectitexpectit-core0.8.1
【解决方案2】:

这些库可能更适合您的需求:

SSHJ

https://github.com/shikhar/sshj

JSCH

http://www.jcraft.com/jsch/

【讨论】:

    猜你喜欢
    • 2017-09-08
    • 2013-10-17
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    相关资源
    最近更新 更多