Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/05/2011, à 17: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, à 20:22)

#2 Le 27/05/2011, à 16: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, à 17: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, à 17:59

pode

Re : [Résolu] Redirections de flux standard : demande de vidage des buffers

Almtesh a écrit :

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, à 19:40)

Hors ligne

#5 Le 27/05/2011, à 18: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, à 18: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, à 20: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.