Maison > Java > javaDidacticiel > ProcessBuilder vs Runtime.exec() : pourquoi se comportent-ils différemment lors de l'exécution de commandes externes ?

ProcessBuilder vs Runtime.exec() : pourquoi se comportent-ils différemment lors de l'exécution de commandes externes ?

Barbara Streisand
Libérer: 2024-11-15 02:54:02
original
854 Les gens l'ont consulté

ProcessBuilder vs Runtime.exec(): Why Do They Behave Differently When Executing External Commands?

ProcessBuilder vs Runtime.exec() : analyse des écarts

Lors de l'exécution de commandes externes en Java, on peut rencontrer des écarts entre le Runtime. getRuntime().exec(...) et new ProcessBuilder(...).start(). L'exploration suivante vise à faire la lumière sur ces différences et à fournir des solutions pour obtenir un comportement cohérent.

Gestion des arguments par défaut

Une distinction clé entre les deux approches réside dans leur gestion. d'arguments. Runtime.getRuntime().exec() attend une seule chaîne ou un tableau de chaînes, tandis que ProcessBuilder attend un tableau de chaînes ou une liste de chaînes. Lorsque vous utilisez exec() avec une seule chaîne, il tokenise la chaîne en interne pour créer un tableau d'arguments.

Comportement de ProcessBuilder

Dans le cas de ProcessBuilder, les arguments sont transmis sous forme de tableau ou de liste, où chaque élément représente un argument. Cependant, si la chaîne n'est pas correctement tokenisée, un seul argument sera formé, y compris les espaces. Cela peut entraîner un comportement inattendu, comme dans l'exemple fourni où la commande n'a pas été exécutée correctement.

Solution

Pour résoudre ce problème avec ProcessBuilder, assurez-vous que les arguments sont correctement tokenisés :

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

Alternativement, une liste peut être utilisée :

List<String> params = java.util.Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2");
ProcessBuilder b = new ProcessBuilder(params);
Copier après la connexion

En pré-tokenisant les arguments, le comportement souhaité peut être obtenu.

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