Eviter les messages d'erreur "Broken pipe"

Le
Vincent Lefevre
Bonjour,

J'aimerais savoir comment éviter les messages d'erreur "Broken pipe"
d'utilitaires que je n'ai pas écrits (et que je ne peux/veux pas
modifier). Par exemple:

svn log | head

donne un message d'erreur:

svn: Write error: Broken pipe

Ce genre de message d'erreur est particulièrement ennuyeux dans le
cas suivant:

script | head

où script exécute le "svn log" et récupère le résultat par pipe.
Dans ce cas, j'obtiens le message d'erreur après l'affichage du
prompt.

À noter que "cat" n'a pas ce problème: il est simplement tué par le
signal SIGPIPE, donc pas de message sur stderr et l'utilisateur peut
utiliser l'exit status pour connaître la cause du problème, e.g. sous
zsh:

$ svn log | cat | head -1

svn: Write error: Broken pipe
$

ou

$ svn log | cat | head -1

svn: Write error: Broken pipe
zsh: exit 1 svn log |
zsh: broken pipe cat |
zsh: done head -1
$

suivant la config de zsh. Dans le 2e cas, j'aurais aimé obtenir:

$ svn log | cat | head -1

zsh: broken pipe svn log |
zsh: broken pipe cat |
zsh: done head -1
$

--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane Chazelas
Le #4579341
2008-04-17, 22:21(+00), Vincent Lefevre:
[...]
J'aimerais savoir comment éviter les messages d'erreur "Broken pipe"
d'utilitaires que je n'ai pas écrits (et que je ne peux/veux pas
modifier). Par exemple:

svn log | head

donne un message d'erreur:

svn: Write error: Broken pipe
[...]


Evite le SIGPIPE:

svn log | sed '1,10!d'

--
Stéphane

Vincent Lefevre
Le #4588221
Dans l'article Stephane Chazelas
Evite le SIGPIPE:

svn log | sed '1,10!d'


Cette solution ne me convient pas pour des raisons d'efficacité:
le "svn log" complet peut prendre énormément de temps (plusieurs
dizaines de secondes, voire plusieurs minutes), alors que je n'ai
besoin que des premières lignes.

Note: je préfère éviter l'utilisation de l'option --limit de
"svn log", qui se base sur le nombre d'entrées et non sur le
nombre de lignes.

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Jacques L'helgoualc'h
Le #4597161
Le 18-04-2008, Vincent Lefevre a écrit :
Stephane Chazelas
Evite le SIGPIPE:

svn log | sed '1,10!d'


Cette solution ne me convient pas pour des raisons d'efficacité:
le "svn log" complet peut prendre énormément de temps (plusieurs
dizaines de secondes, voire plusieurs minutes), alors que je n'ai
besoin que des premières lignes.


Est-ce que « sed 10q » convient mieux ?
--
Jacques L'helgoualc'h


Matthieu Moy
Le #4606261
Jacques L'helgoualc'h
Le 18-04-2008, Vincent Lefevre a écrit :
Stephane Chazelas
Evite le SIGPIPE:

svn log | sed '1,10!d'


Cette solution ne me convient pas pour des raisons d'efficacité:
le "svn log" complet peut prendre énormément de temps (plusieurs
dizaines de secondes, voire plusieurs minutes), alors que je n'ai
besoin que des premières lignes.


Est-ce que « sed 10q » convient mieux ?


On en revient au problème initial : svn rale sur un « broken pipe ».
Je ne crois pas qu'il y ait de solution autre que de patcher svn ...

--
Matthieu



Paul Gaborit
Le #4615561
À (at) Fri, 18 Apr 2008 12:06:03 +0200,
Matthieu Moy
Jacques L'helgoualc'h
Le 18-04-2008, Vincent Lefevre a écrit :
Stephane Chazelas
Evite le SIGPIPE:

svn log | sed '1,10!d'


Cette solution ne me convient pas pour des raisons d'efficacité:
le "svn log" complet peut prendre énormément de temps (plusieurs
dizaines de secondes, voire plusieurs minutes), alors que je n'ai
besoin que des premières lignes.


Est-ce que « sed 10q » convient mieux ?


On en revient au problème initial : svn rale sur un « broken pipe ».
Je ne crois pas qu'il y ait de solution autre que de patcher svn ...


Et en redirigeant la sortie d'erreur de svn vers /dev/null ?

--
Paul Gaborit -



Vincent Lefevre
Le #4615551
Dans l'article Matthieu Moy
On en revient au problème initial : svn rale sur un « broken pipe ».
Je ne crois pas qu'il y ait de solution autre que de patcher svn ...


Je viens de voir qu'un bug a finalement été rapporté:

http://subversion.tigris.org/issues/show_bug.cgi?id014

D'ailleurs, comme indiqué dans le rapport de bug, le problème avait
déjà été mentionné plusieurs fois dans la liste de développement
(dont par moi-même).

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Vincent Lefevre
Le #4624661
Dans l'article Paul Gaborit
Et en redirigeant la sortie d'erreur de svn vers /dev/null ?


Je ne veux pas ignorer les autres messages d'erreur éventuels.

Une solution serait peut-être d'écrire un wrapper pour récupérer
la sortie d'erreur de svn et filtrer le message indiquant un
broken pipe uniquement, avec les inconvénients que cela pose:
problèmes éventuels de bufferisation ou de "désynchronisation"
entre stdout et stderr, et prise en compte des traductions.

En fait, dans mon cas, j'ai déjà un wrapper qui reformate la sortie
de "svn log" (cf mon premier message), mais ça le complique encore
plus, car cette fois, il faut également que je trappe SIGPIPE dans
mon wrapper. D'ailleurs, pour éviter le message d'erreur de svn
après le prompt, il vaut mieux que je le fasse, afin d'être sûr que
mon wrapper termine après svn.

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Publicité
Poster une réponse
Anonyme