Warum ist meine Python3-Skript-Balk bei Piping ihre Ausgabe an Kopf oder Schwanz (Sys-Modul)?

Ich habe ein Python3-Skript, das seine Ausgabe an stdout schreibt, aber es beschwert sich, wenn ich diese Ausgabe in Kopf oder Schwanz pfeife. Beachten Sie in der Beispielausgabe unten, dass es Art von Arbeiten, in diesem head ist die Rückgabe der ersten beiden Zeilen der Ausgabe wie angefordert.

 > ./script.py '../Testdata/*indels.ss' -m 5 | head -2 ~/Databases/Avian_genomes/Sandbox/combined xread 2999 50 Traceback (most recent call last): File "./new.py", line 194, in <module> sys.stdout.write(lineout) IOError: [Errno 32] Broken pipe Exception IOError: IOError(32, 'Broken pipe') in <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> ignored 

Im Gegensatz dazu hat das Skript kein Problem mit seiner Ausgabe, die nach Awk wie unten geleitet wird.

 > ./script.py '../Testdata/*indels.ss' -m 5 | awk 'NR < 3 {print $0}' ~/Databases/Avian_genomes/Sandbox/combined xread 2999 50 

Lassen Sie mich wissen, wenn Sie einen Code aus dem Skript über das hinausgehen, was in der Fehlermeldung enthalten ist. Ich bin mir nicht sicher, was wäre relevant.

2 Solutions collect form web for “Warum ist meine Python3-Skript-Balk bei Piping ihre Ausgabe an Kopf oder Schwanz (Sys-Modul)?”

 ./script.py '../Testdata/*indels.ss' -m 5 | awk 'NR >= 3 {exit} 1' 

Würde das gleiche Verhalten wie head -2 .

Du kannst den SIGPIPE Handler auf einen setzen, der dein Programm leise tötet:

 import signal signal.signal(signal.SIGPIPE, signal.SIG_DFL) 

Ich zitiere von hier aus :

Wenn eine Folge von Befehlen in einer Pipeline erscheint und eine der

Lesebefehle beendet, bevor der Schriftsteller fertig ist

Schriftsteller erhält ein SIGPIPE-Signal.

Das ist was der head tut Dein Skript hat noch nicht fertig geschrieben, aber der head ist schon fertig, also ist stdout geschlossen, daher die Ausnahme.

  • Wickeln Sie einen offenen Stream mit io.TextIOWrapper
  • Unterschied zwischen pip3 und python3 -m pip
  • Python3 import nicht finden Modul
  • Exif Lesung Bibliothek
  • Wo finde ich den QWebPage und den Pymongo in python3.4?
  • Lesen von GPS RINEX Daten mit Pandas
  • Python concurrent.futures.ProcessPoolExecutor: Leistung von .submit () vs .map ()
  • Weird Verhalten in Python mit Dict von Lambda-Funktionen
  • Verwirrt über Pythons ID ()
  • Gibt es irgendeine Möglichkeit, die Einheimischen zur Laufzeit zu beeinflussen?
  • Asterisks außerhalb von Funktionsaufrufen
  • Python ist die beste Programmiersprache der Welt.