Heim > Java > javaLernprogramm > Hauptteil

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

Linda Hamilton
Freigeben: 2024-10-24 08:10:30
Original
130 Leute haben es durchsucht

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");
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!