Я подключаюсь к маршрутизатору Digi Transport WR21 с помощью jExch's ChannelExec, и если я выполняю команду, скажем "modemstat?"Я могу зафиксировать результаты, но если я попытаюсь запустить скрипт на python, произнесите «python hello.py», все, что я получу, это «ОК», и канал закроется, прежде чем я смогу захватить вывод из скрипта.Кто-нибудь знает, как получить вывод сценариев Python?
код команды:
private void sendCommand(String ipAddress, String aCommand) {
JSch jsch = new JSch();
try {
Session session = jsch.getSession("username", ipAddress, 22);
session.setPassword("password");
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect(3*1000);
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(aCommand);
channel.setInputStream(System.in);
InputStream in = channel.getInputStream();
channel.connect(3*1000);
StringBuilder commandOut = new StringBuilder();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0)break;
//System.out.print(new String(tmp, 0, i));
//System.out.println(channel.getInputStream().toString());
commandOut.append(new String(tmp, 0, i));
//setChanged();
//notifyObservers(System.err.toString() + "\n");
}
if (channel.isClosed()) {
System.out.println("exit-status: "
+ channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
throw new JSchException("Cannot execute remote command: " + aCommand + " : " + ee.getMessage());
}
}
channel.disconnect();
session.disconnect();
System.out.println(commandOut);
} catch (JSchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
При запуске из командной строки сценарий hello.py сначала выводит «OK», а затем очерез секунду он выводит «Hello World».