Java中非常基本的终端
我需要从Java应用程序(在windows和linux上运行)到SSH服务器执行5-10个命令,并在JFrame中显示这些命令的输出。输出可以是数千行。 我选择Ganymed SSH进行SSH通信,并执行startShell()方法,该方法为我提供登录消息和上次登录信息,但当我尝试写入OutputStream时,它不起作用 下一行输出上次登录和操作系统信息:Java中非常基本的终端,java,swing,ssh,terminal,Java,Swing,Ssh,Terminal,我需要从Java应用程序(在windows和linux上运行)到SSH服务器执行5-10个命令,并在JFrame中显示这些命令的输出。输出可以是数千行。 我选择Ganymed SSH进行SSH通信,并执行startShell()方法,该方法为我提供登录消息和上次登录信息,但当我尝试写入OutputStream时,它不起作用 下一行输出上次登录和操作系统信息: while((line = outputReader.readLine()) != null){ System.out.
while((line = outputReader.readLine()) != null){
System.out.println(line);
}
但是,以下代码似乎没有按预期工作:
OutputStream inputToShell = (shellSession.getStdin());
inputToShell.write(b);
我需要实现终端逻辑吗?如果是这样的话,我只需要执行一些命令,然后向用户显示输出,如何继续?我的建议是在Ganymed SSH库周围创建一个简单的Java包装器,它接受Java的stdin并将其输出到Shell的stdin,还将Shell的stdout和stderr传输到Java的等价物。通过这种方式,您可以测试如何使用库以及以何种顺序发送哪些命令等 例如:
public static void main(String[] args) {
final ShellSession shellSession = ...
Thread input = new Thread() {
@Override public void run() {
byte[] buffer = new byte[1024];
while(!shellSession.isClosed()) {
int read = System.in.read(buffer);
shellSession.getInputStream().write(buffer, read);
}
}
}
Thread output = ...
Thread error = ...
input.start();
output.start();
error.start();
}
我的建议是围绕Ganymed SSH库创建一个简单的Java包装器,它接受Java的stdin并将其输出到Shell的stdin,还将Shell的stdout和stderr通过管道传输到Java的等价物。通过这种方式,您可以测试如何使用库以及以何种顺序发送哪些命令等 例如:
public static void main(String[] args) {
final ShellSession shellSession = ...
Thread input = new Thread() {
@Override public void run() {
byte[] buffer = new byte[1024];
while(!shellSession.isClosed()) {
int read = System.in.read(buffer);
shellSession.getInputStream().write(buffer, read);
}
}
}
Thread output = ...
Thread error = ...
input.start();
output.start();
error.start();
}
你用命令发送了换行吗?如果没有它,终端将无法处理其
stdin
。您是否用命令发送了换行符?如果没有它,终端将无法处理其stdin
。。。