Il giorno sab, 24/10/2009 alle 14.32 +0200, Matteo Bertini ha scritto: > Supponiamo di voler scrivere uno script python che consuma sys.stdin e > scrive su sys.stdout, ad esempio: > > ### > $ cat echo.py > import sys > for line in sys.stdin: > sys.stdout.write(line) > ### > > Purtroppo l'implementazione banale non si accoppia bene con altri tools > tipo 'head': > > ### > $ python -c "for x in range(200): print 'line'*(x+1)" | python echo.py | > head -5 > line > lineline > linelineline > linelinelineline > linelinelinelineline > Traceback (most recent call last): > File "echo.py", line 5, in <module> > sys.stdout.write(line) > IOError: [Errno 32] Broken pipe > close failed in file object destructor: <---------- da qua in poi a > volte c'è a volte no > Error in sys.excepthook: > > Original exception was: > ### > > Ho provato un po' a giocare con try except senza però beccare il punto > giusto...
#! /usr/bin/python import sys while True: r = sys.stdin.readline() if not r: break try : sys.stdout.write(r) except: break a me funziona... in effetti, per i file grandi _non_ si arriva all'except, per i piccoli sì, e non mi è chiaro perché. Cioè: immagino che per i piccoli dopo che r contiene EOF e viene scritta su stdout, poi stdout non vuole più "write". Ma non capisco perché per i grandi invece non c'è l'exception. boh Pietro _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python