Script shell et affichage "bufferisé"

Script shell et affichage "bufferisé" - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 20-12-2011 à 11:01:52    

Bonjour,
En shell (bash), de manière simple comment je peux faire ça :
 -> j'interroge un routeur pour récupérer plusieurs stats.  [:yann39]  
 -> je voudrais afficher tout d'un coup et pas ligne par ligne, sinon je me prends la latence de chaque requête une par une, c'est gonflant. Je préfère attendre un peu plus au départ et tout avoir à la fin d'un coup.
 
 -> on va me dire d'utiliser des variables, oui c'est ce que je fais pour 50% des valeurs récupérées sauf que :
   1. avec SNMP dans certains cas je suis obligé d'itérer pour analyser un ensemble de stat.
   2. du coup je ne peux pas stocker de manière propre le tout dans une belle variable dont je ferais un echo $variable à la fin.
 
Peut-on faire 2. de manière "dynamique", je ne connais pas d'avance le nombre de valeur à stocker ?  
Existe-t-il une méthode "affichage dans un buffer et balance du buffer quand on veut" ?
 

Reply

Marsh Posté le 20-12-2011 à 11:01:52   

Reply

Marsh Posté le 20-12-2011 à 16:19:33    

Au lieu d'écrire sur stdout tu balances dans un fichier, et à la fin, tu fais un cat de ce fichier [:dawa]


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 20-12-2011 à 17:00:23    

C'est un workaround valide [:bien]
Mais bon, si y avait moyen de le faire "nativement" [:dawa]

Reply

Marsh Posté le 20-12-2011 à 17:38:11    

Normalement y a la commande stdbuf qui devrait pouvoir aider, mais en pratique j'ai pas réussi à en tirer quoique ce soit.


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 20-12-2011 à 18:49:22    

j'avais trouvé setbuf pour le codage en C, je suppose que ça doit son pendant shell.
Je regarderais ça au taf :D

Reply

Marsh Posté le 20-12-2011 à 19:08:49    

sinon il doit être possible de bidouiller un script rapidement vers lequel rediriger la sortie qui bufferise comme tu le souhaites.
 
Genre ça, ça le fait :

Code :
  1. #! /usr/bin/python
  2. import sys
  3.  
  4. buffer = sys.stdin.read()
  5.  
  6. print >> sys.stdout, buffer


 
Résultat (tout est affiché d'un coup) :

Citation :

$ ./test.sh | ./buffer.py  
[mardi 20 décembre 2011, 19:07:26 (UTC+0100)] Ceci est la première ligne
[mardi 20 décembre 2011, 19:07:27 (UTC+0100)] Ceci est la seconde ligne
[mardi 20 décembre 2011, 19:07:28 (UTC+0100)] Ceci est la troisième ligne
[mardi 20 décembre 2011, 19:07:29 (UTC+0100)] Ceci est la dernière ligne


---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.
Reply

Marsh Posté le 20-12-2011 à 19:13:53    

ça pourrait le faire en l'intégrant directement dans le script (histoire que je n'ai pas à faire le pipe sur la ligne de commande), faut juste que j'ai python sur la machine...
thanks [:romf]


Message édité par o'gure le 20-12-2011 à 19:14:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed