java - Sending commands to server via JSch shell channel -
i can't figure out how can send commands via jsch shell channel.
i this, doesn't work:
jsch shell = new jsch(); string command = "cd home/s/src"; session session = shell.getsession(username, host, port); myuserinfo ui = new myuserinfo(); ui.setpassword(password); session.setuserinfo(ui); session.connect(); channel = session.openchannel("shell"); fromserver = new bufferedreader(new inputstreamreader(channel.getinputstream())); toserver = channel.getoutputstream(); channel.connect(); toserver.write((command + "\r\n").getbytes()); toserver.flush();
and read input this:
stringbuilder builder = new stringbuilder(); int count = 0; string line = ""; while(line != null) { line = fromserver.readline(); builder.append(line).append("\n"); if (line.endswith(".") || line.endswith(">")){ break; } } string result = builder.tostring(); consoleout.println(result);
if hangs @ readline()
means either "while" never ending (might unlikely considering code), or, readline()
waiting source, namely iostream
blocks thread cause available()!=true
.
i can't quite troubleshoot code without seeing debug info. advice, have tried pipedintputstream
? idea pipe console input "your" output can "write" it. implement this, need initialize in/out-put.
inputstream in = new pipedinputstream(); pipedoutputstream pin = new pipedoutputstream((pipedinputstream) in); /**...*/ channel.setinputstream(in); channel.connect(); /** ...*/ pin.write(myscript.getbytes());
the same goes question, how read console output.
pipedinputstream pout = new pipedinputstream((pipedoutputstream) out); /** * ... */ bufferedreader consoleoutput = new bufferedreader(new inputstreamreader(pout)); consoleoutput.readline();
and again, if not sure how many lines read , want use "while", make sure inside while prevent 1) busy-waiting 2) ending-condition. example:
while(!end) { consoleoutput.mark(32); if (consoleoutput.read()==0x03) end = true;//end of text else { consoleoutput.reset(); consoleoutput.readline(); end = false; } }
Comments
Post a Comment