#1 Le 23/05/2011, à 16:35
- Almtesh
[Résolu] Redirections de flux standard : demande de vidage des buffers
Bonjour,
J'ai actuellement un programme dont je ne peux rien vous dire (secret professionnel), il est inutile d'essayer d'obtenir d'autres informations que celles que je vous fourni. Pour info, je n'ai pas accès aux codes sources et je ne peux pas modifier le fonctionnement du programme.
Ce programme écrit dans sortie standard (je peux aussi lui demander d'écrire dans un fichier régulier ou un tube nommé) des caractères imprimables qui peuvent être mêlés à des caractères de contrôle ou d'autres types de caractères. Je ne souhaite traiter que les caractères imprimables, les autres ne me sont pas utiles.
Pour filtrer les caractères imprimables, j'utilise grep (j'ai essayé avec tr, strings et sed aussi), mais je dois faire un autre traitement derrière avant d'afficher sur la sortie standard. Le problème, c'est que je peux voir la sortie de premier filtre directement sur la sortie standard, mais si je redirige cette sortie, ne serait-ce que dans cat, plus rien ne s'affiche jusqu'à que le programme prenne fin ou que le buffer soit rempli (vu le débit du programme, ça prend plusieurs minutes).
Voici quelques informations sur le système :
Il s'agit d'une machine qui tourne sous Ubuntu server 10.04. Voici les filtres que j'ai testé :
programme | tr -d -c "[:graph][:space:]"
programme | grep -aoE "[a-zA-Z0-9<>|_@é:.;,-]+" # en fait, ce sont les seuls caractères imprimables dont j'ai besoin.
programme | strings
programme | sed -n '/UN\|DEUX/{s/^(^UN\|DEUX)*//; s/[^,]*$//; p}' # les bouts que j'extrais commencent par UN ou DEUX et finissent par ,
Je cherche soit à diminuer la taille du tampon, soit une commande qui lancerait son vidage immédiat.
À noter aussi que j'ai des doutes sur le choix des paramètres des programmes de filtrages utilisés, n'hésitez pas à faire une critique constructive dessus.
Dernière modification par Almtesh (Le 27/05/2011, à 19:22)
#2 Le 27/05/2011, à 15:18
- GR
Re : [Résolu] Redirections de flux standard : demande de vidage des buffers
bonjour,
d'après la description que tu fais, il semble que le programme n'envoie qu'une seule
ligne de données. C'est à dire pas \n (New Line ou Line Feed). Or les comandes/programmes connectées
par un tube (pipe) se passent les données ligne par ligne, chacune se terminant par \n. Est-ce que je
me trompe ?
A+
Hors ligne
#3 Le 27/05/2011, à 16:40
- Almtesh
Re : [Résolu] Redirections de flux standard : demande de vidage des buffers
En fait, dans le flux qui est binaire, il y a de tout, y compris des caractères imprimables et des retours à la ligne.
Mais peu importe, un gars de la boîte m'a passé un autre programme qui déchiffre plus ou moins tout en caractères imprimables. J'utile donc ce nouveau programme ("programmebis") de la façon qui suit :
programme | programmebis
Là, tout sort immédiatement, mais si je reprend les filtres que j'ai listés plus tôt, ça ne fonctionne toujours pas.
#4 Le 27/05/2011, à 16:59
- pode
Re : [Résolu] Redirections de flux standard : demande de vidage des buffers
Je cherche soit à diminuer la taille du tampon, soit une commande qui lancerait son vidage immédiat.
La page BashFAQ 009 donne des infos et des conseils sur la bufferisation en ligne de commande.
Peut-être que des choses du style :
stdbuf -oL programme | tr -d -c "[:graph][:space:]"
stdbuf -oL programme | stdbuf -oL programmebis | tr -d -c "[:graph:][:space:]"
pourraient aider ?
Dernière modification par pode (Le 27/05/2011, à 18:40)
Hors ligne
#5 Le 27/05/2011, à 17:49
- FRUiT
Re : [Résolu] Redirections de flux standard : demande de vidage des buffers
Euh c'est surement un problème de recopie mais il manque un : là :
tr -d -c "[:graph][:space:]"
tr -d -c "[:graph:][:space:]"
Sinon moi j'avais fait ça, mais c'est le problème à l'envers ça coupe la plupart des caractères de contrôle, pour ne laisser que le texte brut :
clip="((\\\033|[[:cntrl:]])[\[\#\(\)][\?\(\)]?[0-9;]+?[ABCDfGHKsum]|[[:cntrl:]])"
programme | sed -r "s/${clip}//g"
Dernière modification par FRUiT (Le 27/05/2011, à 17:59)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#6 Le 27/05/2011, à 19:25
- Almtesh
Re : [Résolu] Redirections de flux standard : demande de vidage des buffers
Merci beaucoup, problème résolu, tout fonctionne comme je le veux.
Le programme et programmebis fonctionnaient déjà en buffured en fait, mais il fallait que je mette grep avec l'option --line-buffured, comme précisé dans le lien de pode.