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