usa o buffer de linha ao direcionar a saída para o arquivo

4

Eu tenho um programa em perl que imprime em stdout , que eu então canudo para um arquivo, assim:

./skript.pl > file.txt 2>&1

Isto faz a saída desse buffer de skript. No entanto, gostaria de poder ver em que o skript está a funcionar neste momento, por isso estou a tentar encontrar uma forma de activar a memória intermédia de linha nesta configuração, para que a saída seja impressa assim que aparecer \n . (Esse é o comportamento normal se eu apenas imprimir no terminal.)

Eu preciso de uma solução que esteja disponível sem instalar nada no CentOS.

Alterar as coisas dentro do perlscript é uma opção. Eu já tentei $| , mas isso está fazendo mais do que eu quero: isso atrapalha a saída cat file.txt se o final da linha atual não for impresso ainda.

    
por fifaltra 16.12.2015 / 10:32

3 respostas

2

Você pode querer executar seu script com stdbuf , que tem uma opção para o buffer de linha:

stdbuf --output=L --error=L command

A vantagem é que você não precisa modificar o código. Você também pode usar stdbuf com utilitários que não têm o código-fonte disponível ou quando criar esses utilitários é complicado.

    
por 16.12.2015 / 12:04
6

No seu script, você pode usar:

STDOUT->flush;

para limpar o buffer de saída.

Você pode até definir STDOUT->autoflush(1); globalmente.

Para liberar as novas linhas, tente apenas:

STDOUT->autoflush(0);
open STDOUT, ">/tmp/script.out"
.
.
close STDOUT;
    
por 16.12.2015 / 10:53
1

Que tal apenas redirecionar via stderr? Deve ser unbuffered por padrão:

./skript.pl 2> file.txt 1>&2
    
por 17.12.2015 / 04:16

Tags