[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