Eu tenho um script Perl em um sistema * nix que, em um ponto, está processando mais de 50.000 linhas de texto. Isso leva algum tempo. Estou tentando encontrar uma maneira amigável de recursos para que o usuário saiba que o programa não está travando enquanto processa todo esse texto.
Atualmente, estou imprimindo a saída em tempo real enquanto o texto está sendo processado. Estou liberando o buffer de saída e depois imprimindo a saída em uma linha com \r
. Esse parece ser um uso desnecessário de recursos, porque leva quase o dobro do tempo em que não imprimo nada, mas como já disse, ao imprimir nada, parece que o programa está travando.
Então, minha pergunta: existe uma maneira padrão ou simples de informar ao usuário que o programa está realmente executando enquanto executa tarefas de execução longa?
Respostas:
[Acabei de perceber que seu script é perl , mas a mesma lógica se aplica
print "\r"
, etc. Você deseja usarSTDERR
ou desativar o buffer$| = 1
. Veja abaixo.]Uma maneira de implementar um "indicador de progresso" da CLI envolve o uso do caractere
\r
(retorno de carro). Isso traz o cursor para o início da linha atual:Se não faz sentido, tente.
Você pode usar essa técnica para indicar quantas linhas, ou milhares de linhas, foram processadas até o momento. Dezenas ou centenas de linhas podem ser boas, uma vez que não é muito frequente (mais atualizações == tempo de execução mais lento), mas provavelmente ainda com freqüência suficiente para mostrar que o progresso continua. Você pode especificar uma unidade ou apenas acrescentar zeros.
Observe o uso de
-n
e-e
comecho
isso é importante.Você também pode usar
\b
(backspace) para efeito semelhante.Em perl:
fonte
Imprima uma única
.
sem repetir uma nova linha enquanto processa. Técnica antiga.Então você obtém:
Processing...............
Simples e eficaz.
fonte