Maison >Java >javaDidacticiel >Pourquoi « Runtime.exec(String) » ne parvient-il parfois pas à exécuter correctement les commandes ?
Pourquoi Runtime.exec(String) se comporte-t-il différemment pour certaines commandes ?
Runtime.exec(String) permet l'exécution de commandes dans l’environnement du système d’exploitation sous-jacent. Cependant, même si cela fonctionne parfaitement pour certaines commandes, des problèmes surviennent avec d'autres.
Pourquoi la différence ?
La principale différence vient du fait que les commandes ne sont pas exécutées. dans un environnement shell. Le shell fournit des services essentiels qui ne sont pas exécutés par Runtime.exec(String), ce qui entraîne des erreurs.
Quand l'échec se produit-il ?
Les commandes échouent lorsqu'elles dépendent sur les fonctionnalités du shell, telles que :
Solutions
Il existe deux approches pour gérer cette situation :
Déléguer à un shell (simple mais bâclé) :
Passer des commandes à un shell (par exemple, en utilisant Runtime.exec(String[])) :
String myCommand = "cp -R '" + myFile + "' $HOME 2> errorlog"; Runtime.getRuntime().exec(new String[] { "bash", "-c", myCommand });
Assumer les responsabilités du shell (sécurisé et robuste) :
Utiliser ProcessBuilder pour gérer le shell -tâches similaires, telles que l'expansion de variables, la redirection et la division de mots :
String myFile = "some filename.txt"; ProcessBuilder builder = new ProcessBuilder( "cp", "-R", myFile, System.getenv("HOME") ); builder.redirectError(ProcessBuilder.Redirect.to(new File("errorlog"))); builder.start();
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!