O cat
programa está usando 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 está exibindo. Em vez de usar o gato, tente usar um emulador de terminal para ver os caracteres chegando.
O terminal provavelmente também está na cooked
moda. Você pode desativar isso executando o comando stty raw < /dev/tty05
antes de executar o gato. Você pode redefinir a configuração com o comando stty sane < /dev/tty01
, embora possa ser redefinida quando você fechar o terminal.
É comum os programas que usam o terminal lerem caracteres à medida que chegam. Os emuladores de terminal são um desses e são mais apropriados para uso no seu caso.
Se você deseja apenas ler os dados, é simples codificar um caractere de bloqueio re. anúncio na maioria dos idiomas. Isso pode ser executado em loop repetindo os caracteres à medida que eles chegam.
EDIT: O script python a seguir demonstra a leitura de caracteres de um dispositivo terminal, um por um. Isso requer que o terminal esteja no modo bruto para desativar o buffer no driver do terminal. O stty
comando pode ser usado para definir o terminal no modo bruto, mas este 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)
reset
.Obrigado Bill, parece que você me indicou a resposta. Está relacionado ao "buffer de linha", também denominado modo canônico / não canônico, ou seja, também o código de leitura do uart pode suportar ou não o "buffer de linha":
fonte