从sshj输入流中读取时,如何获得“输入提示”?

时间:2012-09-02 18:26:36

标签: java android sshj

我正在尝试使用sshj为android编写一个ssh应用程序。我可以连接到服务器并从输入流中读取而没有问题,得到类似的东西:

Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0.29-generic x86_64)

Documentation: https://help.ubuntu.com/

Last login: date time from user`

通常我希望以user @ host:〜$ now的格式获得输入提示,将输入流放在此处。我能够写入shell并执行命令而没有任何问题,但我真的很担心没有得到输入提示,因为它有助于知道何时写入输出流和正确的格式。 当我执行命令时,提示被写入输入流,它看起来像这样:

"executed command"

user@host:~$ "executed command"

"result"`

我尝试使用readline()和read()进行阅读,并检查流是否有可供阅读的数据。

有没有办法让我在不执行命令的情况下从输入流接收提示?

1 个答案:

答案 0 :(得分:2)

使用如“RudimentaryPTY”示例中所示的StreamCopier并将System.out重定向到PrintStream可以避免此问题:

    baos = new ByteArrayOutputStream();
    ps= new PrintStream(baos);
    System.setOut(ps);
    new StreamCopier (shell.getInputStream(),System.out).bufSize(shell.getLocalMaxPacketSize()).spawn("stdout");
    textView.setText(baos.toString("UTF8"));

这个解决方案绝对不是完美的,但它确实有效。我仍然愿意就如何更好地做到这一点提出建议!

相关问题