Poignée d'Entrée à l'aide de StreamGobbler
J'ai été par le biais de la StreamGobbler à l'adresse suivante
Je comprends l'utilisation et la raison pourquoi il a été mis en œuvre. Cependant, les scénarios couverts sont uniquement celles où il pourrait y avoir une sortie de la commande /erreur de manipulation.
Je ne trouve pas de scénario dans lequel StreamGobbler est utilisé pour gérer les entrées. Par exemple, dans mailx
, je dois spécifier le corps de l'email, qui je l'ai fait dans le format suivant
Process proc = Runtime.getRuntime().exec(cmd);
OutputStreamWriter osw = new OutputStreamWriter(proc.getOutputStream());
osw.write(mailBody);
osw.close();
Comment cela peut-il être gérée par le biais d'StreamGobbler , ou il n'est pas nécessaire d'être manipulés par elle.
OriginalL'auteur Vivek | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
Idéalement, vous employez le
StreamGobbler
sur votre flux d'erreur (dans un thread séparé) si vous êtes déjà à attendre quelque chose surInputStream
, à regarder lorsque l'process.waitFor()
renvoie une valeur non nulle pour trouver le message d'erreur. Si vous n'êtes pas intéressé par laInputStream
, vous pouvez ensuite lire la ErrorStream directement dans votre code, une fois que vous avez terminé avec l'offre vos entrées pour la commande.mailx
de commande. Mais comme un failsafe dois-je inclure? Également en ce qui concerne la mailbody que j'ai mentionné ci-dessus, ce ne serait pas une partie de la StreamGobbler droit ?Non pas comme un failsafe, mais informé sur les erreurs le cas échéant, vous devriez toujours lire le flux d'erreur. Comme vous l'avez dit, inputstream est facultatif si vous ne s'attend pas à la sortie de votre commande. Non, le corps du message à l'est de votre contribution au processus.
Je suis encore confus. Ma commande ressemble à ceci
mailx -s mymail mailsubject mailtoaddress
donc quand je veux l'exécuter et ne serait pas en attendre quoi que ce soit dans le flux d'entrée. Ainsi, le mailbody n'a rien à voir avec la StreamGobbler,et ne doivent être transmis. Est ma compréhension de la droite , s'il vous plaît corrigez-moi si je me trompeDroit, tous vous avez besoin pour passer à StreamGobbler est
proc.getOutputStream()
. veuillez voir le modifier de la façon dont je voudrais l'utiliser.Non, pas besoin. En fait, ne devrait pas, comme StreamGobbler est pour inputstreams (entrée/erreur).
OriginalL'auteur Vikdor