问题:我从使用ChannelShell时发送的命令中得到“有趣”的字符输出,我想知道如何获得您在 PuTTY 会话中看到的常规输出。
“有趣”是指我应该看到这个:
testfile.txt
我看到了这个:
[01;32mtestfile.txt[00m
这类似于这个问题中的问题,除了答案不满足我的需要。答案是调用setPty(false)
完全删除“伪终端”的 ChannelShell,但我需要实时从 ChannelShell 获得输出。这是我正在做的一个例子:
ChannelShell channel = (ChannelShell) session.openChannel("shell");
channel.setOutputStream(new PrintStream(
new ByteArrayOutputStream(), true, "UTF-8") {
@Override
public void write(byte[] b, int off, int len) {
super.write(b, off, len);
String output = new String(b, off, len);
System.out.print(output);
sendNextCommand(output); //Execution of the next command depends on the output here, this is why I need it to not have the funny characters.
}
});
PipedInputStream in = new PipedInputStream();
channelInput = new PipedOutputStream(in);
channel.setInputStream(in);
channel.connect();
while(!channel.isClosed() && channelWaitRetries++ < MAX_CHANNEL_WAIT_RETRIES) {
//Wait for additional output... Sort of a timeout deal. Kind of a hack...
sleep(2500); //Calls Thread.sleep. I just don't want the try/catch here.
System.out.println("Channel not yet closed. Retried " + channelWaitRetries + " of " + MAX_CHANNEL_WAIT_RETRIES);
}
sendNextCommand 方法是检查输出是否与下一个要执行的命令需要显示的内容相匹配的地方。所以基本上,当我看到这样的东西时:[user@server ~]$
然后执行这个:应该ls
返回这个:testfile.txt
但它返回的是这个:(注意:我不能复制和粘贴第一个字符,但它是一个字符代码为 27 的框我认为这是一个转义字符)。[01;32mtestfile.txt[00m
现在我通常会逃避这种事情,但我宁愿把它做好,而且似乎也有很多变种的怪异。所以我在这里。我希望你能帮忙:)
注意:我通过我的 IDE(一个 Eclipse 盗版)在我的 Windows 机器上运行它,但我尝试过调试,变量output
实际上显示了“有趣”的字符。我也尝试过显示它JOptionPane.messageDialog
只是为了确保它不仅仅是 IDE 并且它仍然具有字符。谢谢!