Bonjour,

J'ai un programme qui se connecte à un serveur par l'intermédiaire d'une IO::Socket, et envoie de façon séquentielle une liste de commandes systèmes à exécuter sur le serveur.
Après chaque commande envoyée, le serveur envoie le résultat, que le client affiche dans ses logs.

L'exécution des commandes passe par une méthode, qui renvoie :
  • 1 SortieStandardDeLaCommande si la commande aboutit
  • 0 en cas d'erreur


J'ai un problème de lectures parasites lorsque je tente d'exécuter des commandes systèmes non triviales.

Exemple :
  • rpm -qf `ls -l EXE | awk -F " -> " '{print $2}'` (lecture d'un lien système, récupération du chemin pointé, et interrogation du paquetage d'origine du chemin pointé)
  • echo 1
  • pwd


Le problème vient du fait que le lien EXE n'existe pas forécement dans l'emplacement de travail.
A la première connexion, l'ensemble des commandes fonctionnent correctement, et je récupère le bon résultat pour chaque commande
A la deuxième connexion, j'ai une lecture parasite sur la socket "EXE not found" en résultat de la première commande, et je ne récupère 0 que pour le résultat de la deuxième commande. Tous les résultats sont décalés par la première lecture, ce qui fait que je ne récupère jamais le dernier résultat.
"EXE not found" est la sortie d'erreur de la sous-commande ls -l EXE | awk -F " -> " '{print $2}', et est alors affiché dans la sortie standard de la première commande système.

J'affiche dans un fichier de logs chaque résultat à envoyer au client avant de l'écrire sur la socket, et je n'ai jamais la trace du message "EXE not found".

D'où peut venir l'écriture de ce message sur la socket ?