출력을 파일로 파이프할 때 라인 버퍼링 사용

출력을 파일로 파이프할 때 라인 버퍼링 사용

stdout인쇄한 후 다음과 같은 파일로 파이프하는 Perl 프로그램이 있습니다 .

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

이로 인해 스크립트가 출력을 버퍼링합니다. 다만, 스크립트가 현재 무엇을 하고 있는지 보고 싶어서, 발생하자마자 출력이 출력되도록 이 설정에서 라인 버퍼링을 활성화하는 방법을 찾아보려고 합니다 \n. (단지 터미널에 인쇄하면 이는 정상적인 동작입니다.)

CentOS에 아무것도 설치하지 않고도 작동하는 솔루션이 필요합니다.

Perlscript 내에서 콘텐츠를 변경하는 것은 선택 사항입니다. 나는 이것을 시도했지만 내가 원하는 것 이상을 수행합니다. $|현재 줄의 끝이 아직 인쇄되지 않은 경우 출력이 엉망이 됩니다.cat file.txt

답변1

스크립트에서 다음을 사용할 수 있습니다.

STDOUT->flush;

출력 버퍼를 플러시합니다.

STDOUT->autoflush(1);전역적으로 설정할 수도 있습니다 .

줄 바꿈을 새로 고치려면 다음을 시도해 보세요.

STDOUT->autoflush(0);
open STDOUT, ">/tmp/script.out"
.
.
close STDOUT;

답변2

스크립트를 실행하고 싶을 수도 있습니다표준 버퍼에는 라인 버퍼링 옵션이 있습니다.

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

코드를 수정할 필요가 없다는 장점이 있습니다. stdbuf소스 코드를 사용할 수 없거나 그러한 유틸리티를 구축하는 것이 까다로운 경우 유틸리티를 사용할 수도 있습니다 .

답변3

stderr를 통한 리디렉션은 어떻습니까? 기본적으로 버퍼링되지 않아야 합니다.

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

관련 정보