Heim  >  Artikel  >  Java  >  Wie kann ein Fehler bei der Java-Ausgabeumleitung mit der Methode exec() behoben werden?

Wie kann ein Fehler bei der Java-Ausgabeumleitung mit der Methode exec() behoben werden?

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 08:10:30137Durchsuche

How to Fix Java Output Redirection Failure Using exec() Method?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn