Программа cat использует буферизацию строки. Вот почему вы не видите результаты, пока не нажата клавиша. Драйвер терминала видит символы по мере их поступления, но cat не отображает их. Вместо использования cat, попробуйте использовать эмулятор терминала, чтобы увидеть прибывающие символы.
Терминал, вероятно, также в cooked морде. Вы можете отключить это, выполнив команду stty raw < /dev/tty05 перед запуском cat. Вы можете сбросить настройку с помощью команды stty sane < /dev/tty01 , хотя она может быть сброшена при закрытии терминала.
Программы, использующие терминал, обычно читают символы по мере их поступления. Терминальные эмуляторы являются одними из них, и больше подходят для использования в вашем случае.
Если вы хотите только прочитать данные, просто закодируйте блокирующий символ re. объявление на большинстве языков. Это может быть выполнено в цикле, повторяющем символы по мере их поступления.
РЕДАКТИРОВАТЬ: Следующий скрипт Python демонстрирует чтение символов с терминального устройства по одному. Это требует, чтобы терминал находился в необработанном режиме, чтобы отключить буферизацию в драйвере терминала. Команда stty может использоваться для установки терминала в режиме raw, но эта программа делает это.
#!/usr/bin/python
import termios
import tty
with open('/dev/tty', 'rb') as f:
fd = f.fileno()
old_settings = termios.tcgetattr(fd)
print "Enter characters (q to quit)"
tty.setraw(fd)
ch = ''
try:
while ch != 'q':
ch = f.read(1)
if not ch:
print "End of file"
break
print "Read a character:", ch, '\r'
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)