使用Java和expectit交互进入启用模式

使用Java和expectit交互进入启用模式,java,expect,expectit,Java,Expect,Expectit,我正在对一些网络设备进行维护,并一直在使用Expectit浏览菜单。然而,只有当设备提供我期望的提示时,我才成功。例如,当我登录时,有些设备已经处于启用模式,但有些设备没有 我想做的工作相当于: Expect expect = new ExpectBuilder() .withOutput(channel.getOutputStream()) .withInputs(channel.getInputStream(), channel.getExtInputStre

我正在对一些网络设备进行维护,并一直在使用Expectit浏览菜单。然而,只有当设备提供我期望的提示时,我才成功。例如,当我登录时,有些设备已经处于启用模式,但有些设备没有

我想做的工作相当于:

Expect expect = new ExpectBuilder()
        .withOutput(channel.getOutputStream())
        .withInputs(channel.getInputStream(), channel.getExtInputStream())
        .withEchoOutput(wholeBuffer)
        .withEchoInput(wholeBuffer)
        .withExceptionOnFailure()
        .build();

channel.connect();
if (expect.expect(contains(">")) {
    expect.sendLine("enable");
    expect.expect("assword:");
    expect.sendLine(password);
}
expect.expect(contains("#"));
但我知道这是不对的,也不管用。在对某一提示作出反应和对其他提示作出反应方面提供一些协助将不胜感激。谢谢

您可以尝试,但版本0.8.0中似乎出现了问题,因此请尝试最新版本0.8.1

如果不使用
交互
,您可以使用
任意
匹配器,并根据单个结果的条件使用逻辑。这就是
交互
的基本工作原理。以下是一个例子:

MultiResult multiResult = expect.expect(anyOf(contains(">"), contains("#")));
if (multiResult.getResults().get(0).isSuccessful()) {
    expect.sendLine("enable");
    expect.expect(contains("assword:"));
    expect.sendLine(password);
} else if (multiResult.getResults().get(1).isSuccessful()) {
   expect.expect(contains("#"));
}

希望能有所帮助。

谢谢您的帮助。anyOf正是我所需要的。