“renderizar” o arquivo de texto com retornos de carro (^ M) e salvar a saída no arquivo

1

Eu tenho um programa CLI em Python que é executado por um longo tempo e tem uma espécie de barra de progresso, que basicamente imprime algum texto no loop sem "\ n" no final, na próxima iteração ele imprime "\ r" para apague a linha, imprime algum texto novamente e assim por diante:

while some_condition:
    print "\rprocessed {} out of {}".format(done_counter, all_counter),

Funciona perfeitamente no console, mas quando eu redireciono o stdout para um arquivo não é nenhuma surpresa que eu receba muitos "processados ... ... ^ M". O que eu quero é obter uma representação limpa e "renderizada" do arquivo, como seria visto no console, com todo o "^ M" processado. Eu não quero apenas remover esses caracteres de controle, mas sim aplicá-los ao texto.

Como uma solução atualmente, eu faço isso: tail -n<NUM_LINES> screenlog_file com <NUM_FILES> grande o suficiente, depois selecione o texto "renderizado" com o mouse, copie esse formiga colar para o novo arquivo. Eu me pergunto se existe alguma maneira mais conveniente de conseguir isso.

EDITAR

Devido a @Archemar, foi encontrado isso . Ele resolve meu problema atual, pois posso modificar o código. No entanto, quaisquer ideias / soluções alternativas usando apenas utilitários Linux são muito apreciadas.

    
por DimG 23.10.2015 / 10:21

1 resposta

0

Para esse tipo de aplicativo, executo o programa usando script (para evitar alterar seu comportamento ao redirecionar a saída para um arquivo) e, em seguida, filtre o arquivo typescript resultante usando um script sed. Veja, por exemplo, minha resposta em Posso programaticamente" gravar "códigos de controle ANSI em um arquivo usando utilitários unix? , discutindo script2log .

Existem outros exemplos, como os mencionados nos comentários. No entanto, os mencionados não abordam este caso em particular (onde o retorno de carro é usado para o texto overstrike ), mas somente remove os caracteres de controle.

    
por 16.07.2016 / 03:28