La sortie standard a un tampon, mais elle est bloquée lorsqu'elle est remplie. Vous pouvez rencontrer des situations où vous souhaitez abandonner la sortie autant que le blocage. A ce moment là
import fcntl, sys, os
fl = fcntl.fcntl(sys.stdout.fileno(), fcntl.F_GETFL)
fl = fl | os.O_NONBLOCK
fcntl.fcntl(sys.stdout.fileno(), fcntl.F_SETFL, fl)
En faisant cela
while True:
try:
print("hoge" * 100)
except IOError, (errno, strerror):
sys.stderr.write("I/O error(%s): %s\n" % (errno, strerror))
Quand j'ai écrit
$ ./hoge.py | ./Programme lent
I/O error(11): Resource temporarily unavailable
I/O error(11): Resource temporarily unavailable
...
Il se comportera comme
Recommended Posts