Hello, when I set non blocking flag with fcntl on sys.stdin, then sys.stdout turns into non blocking mode too. Is it normal behaviour? How can I turn stdin into non blocking mode but not stdout? Thanks.
This is a quick program that shows the (my?) problem: import fcntl import os import sys print "STDIN", sys.stdin, "fd=%d" % sys.stdin.fileno() print "STDOUT", sys.stdout, "fd=%d" % sys.stdout.fileno() print "os.O_NDELAY=%04x" % os.O_NDELAY def state(): flag = fcntl.fcntl(sys.stdin.fileno(), fcntl.F_GETFL) print "stdin: flag=%04x" % flag flag = fcntl.fcntl(sys.stdout.fileno(), fcntl.F_GETFL) print "stdout: flag=%04x" % flag state() print "setting non blocking on stdin..." flag = fcntl.fcntl(sys.stdin.fileno(), fcntl.F_GETFL) fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, flag | os.O_NDELAY) state() print "removing non blocking on stdin..." flag = fcntl.fcntl(sys.stdin.fileno(), fcntl.F_GETFL) fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, flag & ~os.O_NDELAY) state() RESULT STDIN <open file '<stdin>', mode 'r' at 0x2aaaaaacd120> fd=0 STDOUT <open file '<stdout>', mode 'w' at 0x2aaaaaacd198> fd=1 os.O_NDELAY=0800 stdin: flag=8002 stdout: flag=8002 setting non blocking on stdin... stdin: flag=8802 stdout: flag=8802 removing non blocking on stdin... stdin: flag=8002 stdout: flag=8002 -- Stéphane Thiell -- http://mail.python.org/mailman/listinfo/python-list