O programa cat
está usando o buffer de linha. É por isso que você não vê os resultados até que a tecla seja pressionada. O driver do terminal está vendo os caracteres quando eles chegam, mas cat
não os exibe. Em vez de usar o cat, tente usar um emulador de terminal para ver os personagens chegando.
O terminal provavelmente também está em cooked
morde. Você pode desabilitar isso executando o comando stty raw < /dev/tty05
antes de executar o cat. Você pode redefinir a configuração com o comando stty sane < /dev/tty01
, embora possa ser redefinido quando você fechar o terminal.
É comum que os programas que usam o terminal leiam os caracteres à medida que chegam. Os emuladores de terminal são um deles e são mais apropriados para uso no seu caso.
Se você quiser apenas ler os dados, é simples codificar um caractere de bloqueio. anúncio na maioria dos idiomas. Isso pode ser executado em um loop ecoando os caracteres conforme eles chegam.
EDIT: O seguinte script python demonstra a leitura de caracteres de um dispositivo de terminal, um por um. Isso requer que o terminal esteja no modo raw para desativar o buffer no driver do terminal. O comando stty
pode ser usado para definir o terminal no modo raw, mas esse programa faz isso.
#!/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)