[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