[Python] script bash-pipe compatibile

Matteo Bertini matteo a naufraghi.net
Sab 24 Ott 2009 17:22:20 CEST


>
> 2009/10/24 Manlio Perillo <manlio.perillo a gmail.com>

>
> Su molti run, a volte ottieni un eccezione.
> L'eccezione è causata dal runtime di Python, che chiama il distruttore
> di stdout/stderr, il quale a sua volta chiama close che fallisce.
>
> Il problema è che:
>
>  * non sembra sia possibile evitare che il traceback venga scritto su
>  stderr.
>  Modificare sys.excepthook non funziona
>
>  * non sembra sia possibile dire a Python che stdout/stderr va
>  considerato chiuso, e che quindi close non va chiamato
>
>
> Credo che questo sia un problema interessante.
>

c'è un bug "simile" già aperto: http://bugs.python.org/issue7111

msg93946 - (view)Author: Antoine Pitrou (pitrou)Date: 2009-10-13 23:13


> Please note that normally an error message is output, but of course it

doesn't display since stderr is invalid :-)


> It's clearer if you close stdout instead:


> $ ./python -c 'pass' >&-

Fatal Python error: Py_Initialize: can't initialize sys standard streams

OSError: [Errno 9] Bad file descriptor

Abandon


> If we want to allow for closed {stdin, stdout, stderr}, I'm not sure

what the semantics should be. Should sys.std{in, out, err} be None? Or a

file object which always throws an error?


> Under Python 2.x, you don't get a crash but the behaviour is quite

unhelpful anyway:


> $ python -c 'print 1' >&-

close failed in file object destructor:

Error in sys.excepthook:


> Original exception was:


>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20091024/0400a888/attachment.htm 


Maggiori informazioni sulla lista Python