2010-10-29 14 views
2

J'ai ce code:nouvelle ligne étrange lors d'une tentative de lecture unbuffered en python

def getch(self): 
    if os.name == 'posix': 
     fd = sys.stdin.fileno() 
     old_settings = termios.tcgetattr(fd) 
     try: 
      tty.setraw(fd) 
      ch = sys.stdin.read(1) 
     finally: 
      termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) 
    elif os.name == 'nt': 
     ch = msvcrt.getch() 
    return ch 

Cela va très bien sur Python 2.6 et 2.7, mais chaque fois que j'essayer de le tester sur python 3.0 et là est une nouvelle ligne imprimée par l'appel stdin.read, je pense que cela peut parce que le python 3 change en sys.stdin, stdout, et stderr mais je ne suis pas sûr de savoir comment le résoudre

EDIT: fonctionnant sur OS X 10.6.4 python 3.1 et Ubuntu 9.04 python 2.6 cela est arrivé pour moi.

+0

Ça n'arrive pas pour moi. –

Répondre

1

Cela peut être un problème spécifique à la plate-forme. Avez-vous essayé le code sur différents systèmes d'exploitation POSIX (par exemple Linux, BSD, Darwin, etc.). Vos résultats sont-ils les mêmes? Ils traitent tous les opérations des terminaux un peu différemment, donc vous devrez peut-être comptabiliser plus de posix plutôt que nt et aller un peu plus loin.

+0

J'ai essayé d'exécuter le code sur Ubuntu 9.04 et le problème est exactement le même sauf qu'il se produit également sur Python 2.6 sur Ubuntu. – user250418