[Python] script bash-pipe compatibile

Manlio Perillo manlio_perillo a libero.it
Sab 24 Ott 2009 15:45:30 CEST


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:
> ###
> 

Su Python 2.5.4, Debian Squeeze, ottengo invece (sempre casualmente):

Traceback (most recent call last):
  File "<string>", line 1, in <module>
IOError: [Errno 32] Broken pipe

oppure:
close failed: [Errno 32] Broken pipe

> Ho provato un po' a giocare con try except senza perņ beccare il punto 
> giusto...
> 
> Suggerimenti?

Quale č il problema che hai con questo comportamento?
Comunque io non sono riuscito a trovare il metodo per non far chiudere
il file descriptor nel distruttore.



Ciao  Manlio


Maggiori informazioni sulla lista Python