Estimativa do tempo necessário para o comando ser executado usando pv

2

Estou processando alguns arquivos de texto com meu script python personalizado. Para acompanhar o progresso, estou usando o comando pv. No momento, estou analisando apenas vários MB de dados, mas gostaria de saber quanto tempo levaria para processar vários GB. O comando que eu usei foi

python command | pv -l -s 2g

Isso me deu saída

1,56M 0:03:06 [8,38k/s] [>                                    ]  0%             

Eu sei que posso calcular o tempo com base nesses parâmetros, mas quero automatizar esse processo.

Depois de ler o manual, encontrei a opção -e que fornece o ETA para um determinado tamanho

python command | pv -l -e -s 2g

Agora posso ver o ETA sendo exibido quando o comando está em execução, mas há muitos outros logs do script que cobrem essa mensagem. Existe alguma maneira de exibir o tempo estimado (ou salvar o último ETA fornecido) quando o script termina?

    
por mateuszb 05.08.2016 / 09:02

1 resposta

1

Tente:

python command | pv -l -e -s 2g -f 2>pv.log
tr '\r' '\n' <pv.log | grep -v '^[[:space:]]*$' | tail -n1

Explicações:

  • Você pode despejar as impressões de pv em um arquivo redirecionando fd 2 (stderr) para esse arquivo. Você também precisa forçar pv a produzir a saída (com -f ), pois normalmente ela só produz saída quando detecta que stderr é um terminal.

  • Se você despejar impressões dessa maneira, o arquivo conterá todas impressões, não apenas as últimas.

  • As impressões serão delimitadas pelo caractere "return" \r , que instrui o terminal a mover o cursor para o início da linha sem alternar para a próxima linha, portanto a próxima impressão substitui a anterior . O comando tr transforma "retorna" \r em "novas linhas" regulares \n .

  • Para ver o conteúdo original de pv.log , tente cat -A pv.log . ( cat exibirá \r como ^M .)

  • O grep remove todas as linhas que contêm apenas espaços em branco (espaços ou tabulações), pois podem aparecer depois das últimas impressões.

  • O tail extrai a última impressão.

por 05.08.2016 / 16:24

Tags