[Python] script bash-pipe compatibile
Matteo Bertini
matteo a naufraghi.net
Sab 24 Ott 2009 16:01:51 CEST
Il 24/10/09 15.45, Manlio Perillo ha scritto:
> 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)
>> ###
>>
> 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
>
questo č un errore mio nell'esempio (ho due processi python a cui si
blocca stdout), meglio:
$ python -c "for x in range(200): print 'line'*(x+1)" | sort | python
echo.py | head -5
> 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.
>
banalmente usare uno scripy python in una pipeline bash come farei con
sort, uniq, cat... senza output spurio.
Ovvio che in alcuni casi serve avere una eccezione ma mi immagino che ci
sia anche un modo facile per ignorarla!
Maggiori informazioni sulla lista
Python