Como gravar a saída do live-f1 em um arquivo

10

Abri o terminal e executei o live-f1, que exibe o feed ao vivo no terminal (texto) que muda a cada segundo. Somente a tecla "Enter" pode ser usada enquanto este programa estiver em execução (sai do programa). Portanto, você não pode digitar mais nada no console.

Eu gostaria de escrever o conteúdo do terminal em um arquivo, como após cada segundo.

Como eu posso fazer isso?

Abrindo o 2º console e usando algum comando?

Não é possível fazê-lo funcionar com o comando setterm -dump.

Gustav
fonte

Respostas:

8

live-f1redesenha a tela com novos dados usando caracteres de controle de terminal (ncurses), exatamente como topou mtr. É por isso que você vê todo esse lixo eletrônico ao redirecionar para um arquivo ou dispositivo não terminal.

Infelizmente, live-f1não fornece uma opção para obter a saída apropriada para salvar e extrair dados posteriormente para estatísticas e afins. Se você ainda deseja salvar a saída para reproduzi-la posteriormente, use-a script.

Isso gravará live-f1 e criará dois arquivos, datilografado e arquivo de temporização.

script -c live-f1 -t 2> timingfile

Isso repetirá a saída

scriptreplay timingfile
forcefsck
fonte
7

Existem algumas maneiras que eu uso para capturar a saída em um arquivo que pode ser útil para você.

script

Isso cria um subshell e coloca toda a saída nele. Faça scripto que quiser, exitpara finalizar seu subshell e sua saída estará em um arquivo chamado "typescript"

tee

Você pode repetir todo o tubo para outro lugar. Assim, você pode teedesativar sua saída padrão em um arquivo:

$ mycommand | tee myoutput

Se você precisar capturar o erro padrão, redirecione-o:

$ mycommand 2>&1 | tee myoutput
starfry
fonte
6

Que tal executar o programa assim:

program > /path/to/file

Isso redireciona a saída de programpara /path/to/fileinstantaneamente.

E se você deseja ter a saída em seu terminal, além de salvá-la em um arquivo. Confira Existe uma maneira no bash para redirecionar a saída e ainda assim ela deve ir para o stdout?

phunehehe
fonte
Obrigado pela resposta rápida. Isso quase funciona, apenas o conteúdo do arquivo é um pouco confuso. Ele deve estar em HTML, mas ao abrir o arquivo, existem alguns símbolos estranhos, veja a captura de tela: upload.ee/image/1223166/ss_01.png . O nome do programa é live-f1.
Gustav
Isso parece engraçado. Você tem certeza de que o programa gera apenas HTML? Existe alguma animação ou algo estranho?
phunehehe
Isso redirecionará apenas a saída padrão. O erro padrão também é necessário?
Faheem Mitha 26/03
2
@Gustav Há códigos ANSI presos lá também. Seu aplicativo gera algum tipo de contador de progresso (que é o que parece) ou colore sua saída ou semelhante. Se houver alguma maneira de desativar isso, será necessário usá-lo para capturar uma saída limpa. Seu aplicativo não gera HTML, portanto, para capturar HTML, você precisará de outro aplicativo para traduzir a saída.
Matthew Scharley 26/03
Por que estou dizendo que é HTML, porque o fiz funcionar ano atrás, mas reformatei o disco onde eu tinha o ambiente de trabalho. Meu objetivo é obter as posições dos pilotos de Fórmula 1 do feed live-f1 em um arquivo. Eu consegui funcionar no ano passado executando o programa live-f1 no 1º terminal, depois iniciando o 2º terminal e usando algum comando que capturou a primeira tela do terminal e salvou-o em um arquivo (cópia do arquivo do ano passado: upload.ee/download/1223347 /0b6545ce227661452c8/html.log ). O comando era algo assim: tty "ponteiro do 1º terminal" "nome do arquivo" "intervalo"
Gustav
3

Você pode usar a tela GNU , juntamente com sua funcionalidade de registro . Observe também que o logfile flush secscomando permite controlar com que frequência a saída é liberada para o disco. No Manual do usuário da tela:

- Comando: logfile flush secs

Define o nome que os arquivos de log obterão. O padrão é 'screenlog.% N'. O segundo formulário altera o número de segundos que a tela aguardará antes de liberar o buffer do arquivo de log no sistema de arquivos. O valor padrão é 10 segundos.

Faheem Mitha
fonte
Vou dar uma olhada.
Gustav