Maison > Java > javaDidacticiel > le corps du texte

Runtime.exec() vs ProcessBuilder.start() : quand dois-je utiliser chacun d'entre eux ?

Susan Sarandon
Libérer: 2024-11-13 15:22:02
original
797 Les gens l'ont consulté

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

ProcessBuilder vs Runtime.exec() : comprendre la différence

Lorsqu'ils tentent d'exécuter des commandes externes à partir de Java, les développeurs rencontrent souvent une divergence dans le comportement entre Runtime.exec() et ProcessBuilder.start().

Runtime.exec() :

L'utilisation de Runtime.getRuntime().exec() implique un processus en deux étapes : tokenisation et exécution. La chaîne d'entrée est analysée et convertie en un tableau d'arguments avant d'être exécutée.

ProcessBuilder :

En revanche, ProcessBuilder fonctionne différemment. Ses constructeurs acceptent un tableau varargs ou une liste de chaînes, où chaque chaîne représente un argument individuel. Les arguments sont ensuite combinés en une seule chaîne qui est transmise au système d'exploitation.

Impact sur l'exécution :

Cette différence dans la gestion des arguments peut avoir un impact sur l'exécution du commande. Par exemple, si la commande inclut des espaces, Runtime.exec() gérera automatiquement la tokenisation, alors que ProcessBuilder nécessite la création explicite du tableau ou de la liste d'arguments.

Exemple :

Considérez la commande suivante avec des espaces :

"C:\DoStuff.exe -arg1 -arg2"
Copier après la connexion

Utilisation de Runtime.exec():

Process p = Runtime.getRuntime().exec("C:\DoStuff.exe -arg1 -arg2");
Copier après la connexion

Dans ce cas, la commande sera exécutée comme prévu , et la valeur exitValue sera 0.

Utilisation de ProcessBuilder :

Process p = (new ProcessBuilder("C:\DoStuff.exe -arg1 -arg2")).start();
Copier après la connexion

Cependant, l'utilisation directe de ProcessBuilder sans tokenisation entraînera une erreur ou un comportement inattendu, renvoyant un exitValue de 1001. Pour corriger cela, vous devez créer explicitement le tableau d'arguments :

Process p = (new ProcessBuilder("C:\DoStuff.exe", "-arg1", "-arg2")).start();
Copier après la connexion

Résumé :

En général, lors de l'utilisation de ProcessBuilder, il est essentiel de fournir les arguments sous forme de liste ou de tableau distinct, indiquant explicitement chaque argument individuel. Cette étape supplémentaire garantit que les arguments sont analysés correctement et que la commande externe est exécutée comme prévu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal