Die Standardausgabe verfügt über einen Puffer, der jedoch beim Befüllen blockiert wird. Möglicherweise stoßen Sie auf Situationen, in denen Sie die Ausgabe genauso aufgeben möchten wie das Blockieren. Zu dieser Zeit dies
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)
Auf diese Weise
while True:
try:
print("hoge" * 100)
except IOError, (errno, strerror):
sys.stderr.write("I/O error(%s): %s\n" % (errno, strerror))
Als ich schrieb
$ ./hoge.py | ./Langsames Programm
I/O error(11): Resource temporarily unavailable
I/O error(11): Resource temporarily unavailable
...
Es wird sich so verhalten
Recommended Posts