Странный перевод строки при попытке небуферизованного чтения в python - PullRequest
2 голосов
/ 30 октября 2010

У меня есть этот код:

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

Это прекрасно работает на python 2.6 и 2.7, но всякий раз, когда я пытаюсь протестировать его на python 3.0 и выше, при вызове stdin.read выводится новая строка, я думаю, что это возможно, потому что python 3 меняется на sys. stdin, stdout и stderr, но я не уверен, как это исправить

РЕДАКТИРОВАТЬ: работает на OS X 10.6.4 python 3.1 и Ubuntu 9.04 python 2.6 это произошло для меня.

1 Ответ

1 голос
/ 30 октября 2010

Это может быть проблемой для конкретной платформы. Вы пробовали код в разных операционных системах на основе POSIX (например, Linux, BSD, Darwin и т. Д.). Ваши результаты одинаковы? Все они обрабатывают операции с терминалами немного по-разному, поэтому вам может потребоваться учесть больше, чем просто posix против nt и пойти немного глубже.

...