Программа 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)