Heim > Java > javaLernprogramm > Runtime.exec() vs. ProcessBuilder.start(): Wann sollte ich jedes verwenden?

Runtime.exec() vs. ProcessBuilder.start(): Wann sollte ich jedes verwenden?

Susan Sarandon
Freigeben: 2024-11-13 15:22:02
Original
877 Leute haben es durchsucht

Runtime.exec() vs. ProcessBuilder.start(): When Should I Use Each?

ProcessBuilder vs. Runtime.exec(): Den Unterschied verstehen

Beim Versuch, externe Befehle aus Java auszuführen, stoßen Entwickler oft auf eine Diskrepanz im Verhalten zwischen Runtime.exec() und ProcessBuilder.start().

Runtime.exec():

Die Verwendung von Runtime.getRuntime().exec() beinhaltet ein zweistufiger Prozess: Tokenisierung und Ausführung. Die Eingabezeichenfolge wird vor der Ausführung analysiert und in ein Array von Argumenten umgewandelt.

ProcessBuilder:

Im Gegensatz dazu funktioniert ProcessBuilder anders. Seine Konstruktoren akzeptieren ein varargs-Array oder eine Liste von Zeichenfolgen, wobei jede Zeichenfolge ein einzelnes Argument darstellt. Die Argumente werden dann zu einer einzigen Zeichenfolge zusammengefasst, die an das Betriebssystem übergeben wird.

Auswirkungen auf die Ausführung:

Dieser Unterschied in der Argumentbehandlung kann Auswirkungen auf die Ausführung haben Befehl. Wenn der Befehl beispielsweise Leerzeichen enthält, übernimmt Runtime.exec() automatisch die Tokenisierung, während ProcessBuilder das explizite Erstellen des Argumentarrays oder der Argumentliste erfordert.

Beispiel:

Betrachten Sie den folgenden Befehl mit Leerzeichen:

"C:\DoStuff.exe -arg1 -arg2"
Nach dem Login kopieren

Verwenden von Runtime.exec():

Process p = Runtime.getRuntime().exec("C:\DoStuff.exe -arg1 -arg2");
Nach dem Login kopieren

In diesem Fall wird der Befehl wie vorgesehen ausgeführt , und der ExitValue ist 0.

Verwendung von ProcessBuilder:

Process p = (new ProcessBuilder("C:\DoStuff.exe -arg1 -arg2")).start();
Nach dem Login kopieren

Die direkte Verwendung von ProcessBuilder ohne Tokenisierung führt jedoch zu einem Fehler oder unerwartetem Verhalten und gibt eine zurück Exit-Wert von 1001. Um dies zu korrigieren, müssen Sie das Argument-Array explizit erstellen:

Process p = (new ProcessBuilder("C:\DoStuff.exe", "-arg1", "-arg2")).start();
Nach dem Login kopieren

Zusammenfassung:

Im Allgemeinen ist es bei der Verwendung von ProcessBuilder wichtig, Folgendes bereitzustellen die Argumente als separate Liste oder Array, wobei jedes einzelne Argument explizit angegeben wird. Dieser zusätzliche Schritt stellt sicher, dass die Argumente korrekt analysiert werden und der externe Befehl wie vorgesehen ausgeführt wird.

Das obige ist der detaillierte Inhalt vonRuntime.exec() vs. ProcessBuilder.start(): Wann sollte ich jedes verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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