Posting to python-dev as it is no more relates to the idea of improving
print().
sys.stdout.write() in Python 3 causes backwards incompatible behavior that
breaks recipe for unbuffered character reading from stdin on Linux -
http://code.activestate.com/recipes/134892/ At first I though that the
problem is in the new print() function, but it appeared that the culprit is
sys.stdout.write()
Attached is a test script which is a stripped down version of the recipe
above.
If executed with Python 2, you can see the prompt to press a key (even
though output on Linux is buffered in Python 2).
With Python 3, there is not prompt until you press a key.
Is it a bug or intended behavior? What is the cause of this break?
--
anatoly t.
import sys
class _GetchUnix:
def __init__(self):
import tty, sys
def __call__(self):
import tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
getch = _GetchUnix()
sys.stdout.write("You choice:")
sys.stdout.write( getch() + "\n")
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com