Maison  >  Article  >  Java  >  Comment réparer l’échec de la redirection de sortie Java à l’aide de la méthode exec() ?

Comment réparer l’échec de la redirection de sortie Java à l’aide de la méthode exec() ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-24 08:10:30134parcourir

How to Fix Java Output Redirection Failure Using exec() Method?

Échec de la redirection de sortie de la méthode Java exec()

Dans ce problème, un utilisateur tente de rediriger la sortie d'un script shell à l'aide du runtime Java Méthode .getRuntime().exec(). Cependant, la redirection échoue et le fichier de sortie spécifié n'est pas créé.

L'extrait de code fourni est :

Process p = Runtime.getRuntime().exec("sh somescript.sh &> out.txt");

En général, cette commande doit rediriger la sortie du script vers le fichier out.txt. Cependant, dans ce cas, la sortie n'est pas redirigée, même si le script s'exécute correctement lorsqu'il est exécuté directement dans le shell.

Solution : utilisez ProcessBuilder pour la redirection

Le La solution réside dans l'utilisation de ProcessBuilder au lieu de Runtime.getRuntime().exec(). ProcessBuilder offre plus de contrôle sur la création de processus et permet une redirection explicite des flux d'entrée, de sortie et d'erreur.

Le code modifié à l'aide de ProcessBuilder est le suivant :

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

Dans ce code, un ProcessBuilder est créé et configuré pour rediriger à la fois les flux de sortie standard et d'erreurs vers le fichier out.txt. La méthode start() est ensuite utilisée pour créer le processus, en lançant potentiellement une IOException en cas de problème.

En utilisant ProcessBuilder, la redirection de sortie peut être explicitement gérée, résolvant ainsi le problème.

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!

Déclaration:
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