我的Java应用程序必须像这样工作:
我使用了ExpectJ (附带一些输出流)。它解决了第1、3、4、5点。
但是第2点有一个问题,在我的应用程序中,我需要得到分开的答案。但我们不知道它们的长度。命令提示可以是不同的。任何人都知道如何“黑”ExpectJ,这样就会有更多的同步吗?我在寻找这样的行为:发送,等待完整的回答,发送,等待.我已经尝试过一些基本的同步技巧,但这以超时和通常丢失的连接结束。
这个问题与我的老问题有关:
Java library to run multiple unrelated commands on a remote server via ssh
发布于 2013-04-02 12:16:42
问题基本上是期望j同时发送和侦听,在单独的线程中缓冲输入和输出,因此您必须知道响应何时结束,以便可以分隔每个请求/响应块。如果您不关心expect“交互”模式,您可以尝试破解expect4J、expect4J (https://github.com/ronniedong/Expect-for-Java)甚至apache。
我现在正面临着完全相同的问题,而且由于我需要交互(),我现在没有任何其他选择。因此,下面这个解决方案并不优雅,但可能会完成这项工作。不幸的是,我们没有一个体面的expect java实现。我希望我们将在java 8,当(我希望)我们将有结束。
ExpectJ ex = new ExpectJ(50);
Spawn spawn = ex.spawn(new SshSpawn("192.168.56.101", 22, "alice", "password"));
String command = "hostname -s;expr 123456788 + 1";
spawn.send(command+"\n");
spawn.expect("123456789");
String lsResults = spawn.getCurrentStandardOutContents().split("123456788 \\+ 1\r\n")[2].split("123456789")[0];
String[] lsRows = lsResults.split("\r\n");
for(int i=0;i<lsRows.length;i++){
System.out.println(i+":"+lsRows[i]);
}https://stackoverflow.com/questions/12894113
复制相似问题