Попытка вернуть вывод команды Unix в виде строки в Java ... не дает ожидаемых результатов - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь создать небольшую программу на Java, которая позволит мне получить доступ к удаленному Unix серверу, выполнить некоторые команды и затем отобразить вывод этих команд в среде IDE.

Я собирал фрагменты кода и пытался понять, как это работает, когда я go вместе, что, вероятно, не идеально!

В настоящее время я могу запускать команды с консоли и Я могу видеть результаты на сервере, но мне не удалось отправить результат обратно на консоль. Всякий раз, когда я пытаюсь отправить их в виде строки, я получаю что-то вроде java .lang. UNIXProcess$ProcessPipeInputStream@9x57d1ad вместо обычного вывода, который я вижу на сервере. Я уверен, что есть что-то очевидное, что я делаю неправильно, но я новичок и, несмотря на то, что потратил часы на поиски, мне пока не удалось найти решение. Буду очень признателен за помощь. Спасибо!

ЗАПУСК НА СЕРВЕРЕ:

public static void main(String[] args) {
    try {
        ServerSocket serverSocket = new ServerSocket(portNumber);
        Socket clientSocket = serverSocket.accept();
        PrintWriter out =
                new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
                new InputStreamReader(clientSocket.getInputStream()));

        while ((inputLine = in.readLine()) != null) {

            out.println(inputLine);

            if (inputLine.equals("storage")) {
                runStorage();
                printResults(runStorage()); }

     catch (Exception e) {

        e.printStackTrace();

    }

public static Process runStorage() throws IOException {

    ProcessBuilder processBuilder = new ProcessBuilder();
    processBuilder.command("df", "-h");

    Process process = processBuilder.start();
    printResults(process);

    return process;

}

public static String printResults(Process process) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = "";
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
    return line;  }

КЛИЕНТ:

        public class ClientInitiator {

            public static void main(String[] args) throws IOException, InterruptedException {

                String hostName = "myHostNameGoesHere";
                Socket echoSocket = new Socket(hostName, portNumber);
                PrintWriter out =
                        new PrintWriter(echoSocket.getOutputStream(), true);
                BufferedReader in =
                        new BufferedReader(
                                new InputStreamReader(echoSocket.getInputStream()));
                BufferedReader stdIn =
                        new BufferedReader(
                                new InputStreamReader(System.in));


                {
                    String userInput;

                    while (!(userInput = stdIn.readLine()).equals("")) {
                        out.println(userInput);
                        if (userInput.equals("storage")) {
                            String serverResponse = in.readLine();
                            System.out.println(serverResponse);}

1 Ответ

0 голосов
/ 04 августа 2020

Чтобы получить вывод работающего процесса, попробуйте следующий код.

InputStream is = process.getInputStream();  
InputStreamReader isr = new InputStreamReader(is);  
BufferedReader br = new BufferedReader(isr);  
String line;  
while ((line = br.readLine()) != null) {  
  System.out.println(line);  
}  
...