gpt4 book ai didi

java - 如何在 JSch 中检测错误(如 "Directory not found"、 "TNS listener lost contact"等)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:37 24 4
gpt4 key购买 nike

我需要在使用 JSch 触发任何命令时收到错误消息。

目前我正在使用下面的代码来获取 tail 命令的输出,但是如果文件不存在,我应该将错误作为输出(我没有得到)。

public String getOutput() {
LOGGER.debug("[getOutput]");
StringBuffer output = new StringBuffer();
InputStream in = null;
if (channel != null && channel.isConnected()) {
try {
in = channel.getInputStream();

byte[] tmp = new byte[1024];
while (true) {
LOGGER.debug("[getOutput] in while");
while (in.available() > 0) {
LOGGER.debug(in.available());
int i = in.read(tmp, 0, 1024);
if (i < 0)
break;
output.append(new String(tmp, 0, i));
}
if (channel.isClosed()) {
LOGGER.debug("[getOutput] Channel is closed, so breaking while loop");
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
channel.disconnect();
}
} else {
System.out.println("Channel is disconnected");
}

return output.toString();
}

有什么方法可以让我也收到错误消息吗?

提前致谢。

最佳答案

错误通常写入错误输出。您可以使用 getErrStream 读取错误输出。

请注意,您需要并行读取标准输出(getInputStream)和错误输出,而不是顺序读取。我的意思是你不能只克隆你的 while 循环,你有 getInputStreamgetErrStream。您需要有一个循环,从两个循环中读取(读取一个中可用的内容,读取第二个中可用的内容,等待新数据并重复)

当你先读一个然后读另一个时,如果后者输出很大,它的输出缓冲区变满,命令停止,永远不会完成。因此,如果您一直等待第一个输出关闭,就会与服务器发生死锁。


请注意,“Auth failed” 不是命令输出的错误。这是 JSch 库抛出的异常。所以它与您的代码无关。

关于java - 如何在 JSch 中检测错误(如 "Directory not found"、 "TNS listener lost contact"等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37528319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com