2016-06-13 10 views
2

Erstellt diese Funktion, um Unix-Befehle einzugeben und die Ausgaben dieses Unix-Befehls auszugeben. Aber ich habe Probleme mit den Unix-Befehlen, die ich verwende. "ls" funktioniert, um die Liste der Dateien auszugeben, aber wenn ich "ls -lart" mache, gibt es null aus. Probleme beim weiteren Debuggen oder warum dies nicht funktioniert. Code unten.Gepufferter Reader Ausgabe Runtime exec Befehle

private String[] unixCommand (String command, Boolean boolOutput) throws IOException, InterruptedException{ 
    Process run; 
    int i = 0; 
    String output = ""; 
    String[] finalOutput = new String[1000]; 
    sendToProcessView("Unix Command: " + command); 
    run = Runtime.getRuntime().exec(command); 
    run.waitFor(); 
    sendToProcessView("In Unix Command"); 
    if (boolOutput == true){   
     sendToProcessView("In Output Mode of Unix Command"); 
     BufferedReader stdInput = new BufferedReader(new InputStreamReader(run.getInputStream())); 
     sendToProcessView("Passed Buffer Reader"); 
     while ((output = stdInput.readLine()) != null) { 
      sendToProcessView("Output: " + output); 
      finalOutput[i] = output; 
      i++; 
     } 
    } 
    return finalOutput; 
} 
+0

Anruf 'run.waitFor()', nachdem Sie habe die Ausgabe des Befehls verbraucht, vorher nicht. – VGR

+0

Es wurde festgestellt, dass es "ls" -Befehle akzeptiert, aber nicht "ls Main *" -Befehle mit Wildcard akzeptiert. – Devilishdil24

+0

Gefunden wurde benötigt – Devilishdil24

Antwort

1

Wenn mit der Konsole interagieren, sollten Sie die Konsole exec selbst und dann den Prozess-Eingangsstrom verwenden, um Befehle zu senden, zB (Pseudo-Code - ich bin Java-Code von meiner Lage zu testen, nicht eingerichtet, sorry

)
sendToProcessView("Unix Command: " + command); 
run = Runtime.getRuntime().exec("bash"); 
PrintStream in = new PrintStream(run.getOutputStream()); 
in.println("ls -lart"); 

anschließend können Sie den Prozess herunterfahren, indem Sie „exit“ das Senden und die Ergebnisse, die die Art und Weise zu lesen Sie waren, oder ein Gewinde Hörer verwenden, wie DataFetcher

+0

PrintStream gab einen Konstruktorfehler, und ich stimme zu, dass das Beenden des Prozesses die beste Vorgehensweise ist, das Problem jedoch nicht behoben wurde. – Devilishdil24

+0

Ich habe das Code-Snippet behoben - es ist jetzt run.getOutputStream() (war getInputStream()) – ControlAltDel

+0

Sorry, aber nicht auf dem Terminal ausdrucken. Den Wert von der Funktion zurückgeben. – Devilishdil24