Fehler bei der Ausgabeumleitung der Java exec()-Methode
Bei diesem Problem versucht ein Benutzer, die Ausgabe eines Shell-Skripts mithilfe der Java-Laufzeit umzuleiten .getRuntime().exec()-Methode. Die Umleitung schlägt jedoch fehl und die angegebene Ausgabedatei wird nicht erstellt.
Der bereitgestellte Codeausschnitt lautet:
Process p = Runtime.getRuntime().exec("sh somescript.sh &> out.txt");
Normalerweise sollte dieser Befehl die Ausgabe des Skripts in die Datei umleiten out.txt. In diesem Fall wird die Ausgabe jedoch nicht umgeleitet, obwohl das Skript erfolgreich ausgeführt wird, wenn es direkt in der Shell ausgeführt wird.
Lösung: Verwenden Sie ProcessBuilder für die Umleitung
Die Die Lösung liegt in der Verwendung von ProcessBuilder anstelle von Runtime.getRuntime().exec(). ProcessBuilder bietet mehr Kontrolle über die Prozesserstellung und ermöglicht die explizite Umleitung von Eingabe-, Ausgabe- und Fehlerströmen.
Der mit ProcessBuilder geänderte Code lautet wie folgt:
ProcessBuilder builder = new ProcessBuilder("sh", "somescript.sh"); builder.redirectOutput(new File("out.txt")); builder.redirectError(new File("out.txt")); Process p = builder.start(); // may throw IOException
In diesem Code a ProcessBuilder wird erstellt und konfiguriert, um sowohl Standardausgabe- als auch Fehlerströme in die Datei out.txt umzuleiten. Die start()-Methode wird dann verwendet, um den Prozess zu erstellen und möglicherweise eine IOException auszulösen, wenn ein Problem vorliegt.
Durch die Verwendung von ProcessBuilder kann die Ausgabeumleitung explizit verwaltet werden, wodurch das Problem behoben wird.
Das obige ist der detaillierte Inhalt vonWie kann ein Fehler bei der Java-Ausgabeumleitung mit der Methode exec() behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!