View previous topic :: View next topic |
Author |
Message |
glockenstein n00b
Joined: 26 Mar 2007 Posts: 10
|
Posted: Mon Mar 26, 2007 6:05 pm Post subject: Broken pipe |
|
|
Hallo Forum!
Wenn ich den Befehl
# equery list | head -n 5
eingebe, bekomme ich folgendes Ergebnis:
* installed packages
app-admin/eselect-1.0.7
app-admin/eselect-oodict-20060706
app-admin/eselect-opengl-1.0.5
app-admin/eselect-vi-1.1.4
Traceback (most recent call last):
File "/usr/bin/equery", line 1733, in ?
cmd.perform(local_opts)
File "/usr/bin/equery", line 1361, in perform
self._print_installed(matches, rx)
File "/usr/bin/equery", line 1417, in _print_installed
matches, rx, 1)
File "/usr/bin/equery", line 1397, in _generic_print
print_info(0, pkg.get_cpv())
File "/usr/lib/gentoolkit/pym/gentoolkit/pprinter.py", line 20, in print_info
sys.stdout.write(s)
IOError: [Errno 32] Broken pipe
Ist diese Fehlermeldung vermeidbar? Optionen -q und -C helfen leider nicht.
Interessanterweise geht es mit
# equery list 2>&1 | head -n 5
aber das kann ja nicht die Lösung sein ...
Gruß Micha |
|
Back to top |
|
|
tacki Guru
Joined: 29 Jun 2002 Posts: 418 Location: Germany
|
Posted: Tue Mar 27, 2007 8:02 am Post subject: |
|
|
Der Grund ist ganz einfach:
equery will etwas ausgeben, und es gibt keinen 'reader' mehr im pipe, da head nach 5 zeilen dicht macht. das ergebnis ist ein SIGPIPE-Error, der equery zum absturz bringt.
siehe auch hier:
http://www.unixguide.net/unix/bash/E2.shtml
Eventuell gibts aber eine andere Lösung für dein ursprüngliches Problem? Was willst du denn genau erreichen? _________________ "Kazaa ist der beste MP3-Player den es gibt!"
.o( ... ) |
|
Back to top |
|
|
glockenstein n00b
Joined: 26 Mar 2007 Posts: 10
|
Posted: Tue Mar 27, 2007 8:26 am Post subject: |
|
|
tacki wrote: | Der Grund ist ganz einfach:
equery will etwas ausgeben, und es gibt keinen 'reader' mehr im pipe, da head nach 5 zeilen dicht macht. das ergebnis ist ein SIGPIPE-Error, der equery zum absturz bringt.
..
Eventuell gibts aber eine andere Lösung für dein ursprüngliches Problem? Was willst du denn genau erreichen? |
Nun ja, es gibt kein ursprüngliches Problem. Mir ist bei irgendeinem Kommando aufgefallen, daß tail eine
Zeile weniger liefert als gewünscht. Habe vergessen was das war. Habe dann mit head und tail getestet,
was es gewesen sein könnte und bin dabei auf diese Merkwürdigkeit gestoßen.
Ich dachte, es könnte ein Fehler in equery sein. Habe nur ich diesen Absturz?
Gruß Micha |
|
Back to top |
|
|
tacki Guru
Joined: 29 Jun 2002 Posts: 418 Location: Germany
|
Posted: Tue Mar 27, 2007 8:49 am Post subject: |
|
|
Nein, das ist ein logischer Error in /bin/bash. Wird bei jedem auftreten, der die standard-bash verwendet... ka wie es bei den Alternativen wie zsh etc. aussieht. _________________ "Kazaa ist der beste MP3-Player den es gibt!"
.o( ... ) |
|
Back to top |
|
|
hurra Apprentice
Joined: 11 Apr 2004 Posts: 224
|
Posted: Tue Mar 27, 2007 12:12 pm Post subject: |
|
|
tacki wrote: | Nein, das ist ein logischer Error in /bin/bash. Wird bei jedem auftreten, der die standard-bash verwendet... ka wie es bei den Alternativen wie zsh etc. aussieht. |
zsh bringt den gleichen Fehler |
|
Back to top |
|
|
glockenstein n00b
Joined: 26 Mar 2007 Posts: 10
|
Posted: Tue Mar 27, 2007 12:28 pm Post subject: |
|
|
tacki wrote: | Nein, das ist ein logischer Error in /bin/bash. Wird bei jedem auftreten, der die standard-bash verwendet... ka wie es bei den Alternativen wie zsh etc. aussieht. |
Gefunden auf www.gnu.org:
As of bash-3.1, bash does not report SIGPIPE errors by default. You
can build a version of bash that will report such errors.
Installiert habe ich aber doch 3.1_p17. Eventuell ist da etwas mit dem Gentoo-Patch
bash-3.0-trap-fg-signals.patch nicht okay?
Gruß Micha |
|
Back to top |
|
|
Mr. Anderson l33t
Joined: 22 Apr 2004 Posts: 762
|
Posted: Wed Mar 28, 2007 1:01 am Post subject: |
|
|
Du kannst es umgehen mit sed (oder natürlich auch anderen Editoren)
Code: | equery list | sed -e'1,5!d' |
|
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Wed Mar 28, 2007 1:36 am Post subject: |
|
|
glockenstein wrote: | As of bash-3.1, bash does not report SIGPIPE errors by default.
Eventuell ist da etwas mit dem Gentoo-Patch [...] nicht okay? |
Ist doch alles in Ordnung: Die Bash meldet den Fehler ja auch nicht, das macht Python. Mit sieht man keine solche Meldung. |
|
Back to top |
|
|
glockenstein n00b
Joined: 26 Mar 2007 Posts: 10
|
Posted: Wed Mar 28, 2007 8:20 am Post subject: |
|
|
mv wrote: | glockenstein wrote: | As of bash-3.1, bash does not report SIGPIPE errors by default.
Eventuell ist da etwas mit dem Gentoo-Patch [...] nicht okay? |
Ist doch alles in Ordnung: Die Bash meldet den Fehler ja auch nicht, das macht Python. Mit sieht man keine solche Meldung. |
Es ging um equery. Aber interessant: Habe jetzt einfach mal equery list -c eingetippt.
Dann geht es. Diese lokale Option wird bei equery list --help gar nicht angezeigt.
Was bewirkt diese Option und warum ist sie nicht dokumentiert?
Trotzdem bleibt die Frage, weshalb bash einen SIGPIPE error meldet, obwohl es das nicht sollte
laut Dokumentation. Und das finde ich nicht in Ordnung
Gruß Micha |
|
Back to top |
|
|
glockenstein n00b
Joined: 26 Mar 2007 Posts: 10
|
Posted: Wed Mar 28, 2007 8:28 am Post subject: |
|
|
glockenstein wrote: |
Es ging um equery. Aber interessant: Habe jetzt einfach mal equery list -c eingetippt.
Dann geht es. Diese lokale Option wird bei equery list --help gar nicht angezeigt.
Was bewirkt diese Option und warum ist sie nicht dokumentiert?
Gruß Micha |
Unsinn ich schrieb. Er suchte nach "-c" und fand weniger als 5 Zeilen.
Klar das es dann geht ... |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Wed Mar 28, 2007 12:10 pm Post subject: |
|
|
glockenstein wrote: | mv wrote: | Die Bash meldet den Fehler ja auch nicht, das macht Python. |
Trotzdem bleibt die Frage, weshalb bash einen SIGPIPE error meldet |
|
|
Back to top |
|
|
glockenstein n00b
Joined: 26 Mar 2007 Posts: 10
|
Posted: Wed Mar 28, 2007 12:36 pm Post subject: |
|
|
mv wrote: | glockenstein wrote: | mv wrote: | Die Bash meldet den Fehler ja auch nicht, das macht Python. |
Trotzdem bleibt die Frage, weshalb bash einen SIGPIPE error meldet |
|
Lies bitte noch mal in meinen Beitrag oben:
Gefunden auf www.gnu.org:
As of bash-3.1, bash does not report SIGPIPE errors by default. You
can build a version of bash that will report such errors.
Offenbar stürzt equery/python aber ab, weil eben doch ein SIGPIPE error geliefert wird!
Oder? |
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Wed Mar 28, 2007 3:04 pm Post subject: |
|
|
glockenstein wrote: | As of bash-3.1, bash does not report SIGPIPE errors by default. |
Tut sie ja auch nicht. Zur Verdeutlichung habe ich ja das eix-Beispiel angegeben. Dass ein spezielles Programm (hier vermutlich: der Python-Interpreter) trotzdem feststellen kann, dass die Ausgabepipe weg ist und einen Fehler bringt, ist ja eine andere Sache. |
|
Back to top |
|
|
glockenstein n00b
Joined: 26 Mar 2007 Posts: 10
|
Posted: Wed Mar 28, 2007 3:46 pm Post subject: |
|
|
mv wrote: | glockenstein wrote: | As of bash-3.1, bash does not report SIGPIPE errors by default. |
Tut sie ja auch nicht. Zur Verdeutlichung habe ich ja das eix-Beispiel angegeben. Dass ein spezielles Programm (hier vermutlich: der Python-Interpreter) trotzdem feststellen kann, dass die Ausgabepipe weg ist und einen Fehler bringt, ist ja eine andere Sache. |
Jetzt hab ich es kapiert. Ich habe die ganze Zeit angenommen, daß die bash auch keinen SIGPIPE error generieren
sollte, der python zum Absturz bringt. Und das mit eix, dachte ich, wäre eine Verwechslung gewesen.
Habe inzwischen einige Webseiten zu dem Thema SIGPIPE und python gelesen und deshalb dem Entwickler von
equery eine Mail geschrieben und gebeten, er möge ein "signal.signal(signal.SIGPIPE, signal.SIG_DFL)" in sein
Script aufnehmen. Mal sehen, was er schreibt.
Gruß, Micha. |
|
Back to top |
|
|
|