Получение вывода скрипта Python при подключении к устройству Diginet через ssh с помощью jsch - PullRequest
0 голосов
/ 01 марта 2012

Я подключаюсь к маршрутизатору 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».

1 Ответ

1 голос
/ 22 марта 2012

Ответ в два раза.Первая часть заключается в том, что мне не хватало «\ r \ n» в конце моей команды, поэтому «python hello.py» должен был быть «python hello.py \ r \ n».Вторая часть заключается в том, что мне нужно было использовать ChannelShell вместо ChannelExec.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...