로그 파일을 만든 perl 스크립트가 있으며이 스크립트가 수행하는 모든 작업은 로그 파일에 기록됩니다.
잘 작동하고 일부 문제를 해결하기 위해 일부 변경했지만 이제 이상한 문제가 발생하고 파일 처리기가 로그 파일을 작성하는 동안 중단되고 스크립트를 종료 할 때까지 로그 파일을 업데이트하지 않습니다. 종료 (x) 옵션 포함.
예를 들어, 내 스크립트는
추출물
확인
백업
X. 종료
이제 추출을 실행하고 로그를 업데이트하고 있습니다. 하지만 extrcation이 완료되는 동안 로그 파일을 열었고 마지막 줄을 볼 수 있습니다.
Date: XYZ file extracted.
Date: XXXX file is preparing to extract
Date:
모든 파일의 압축을 푼 후에도 더 이상 업데이트하지 않으면 X 옵션을 사용하여 스크립트를 종료하고 그 후에야 전체 로그를 볼 수 있습니다.
나는 그것이 왜 붙어 있는지 이해하지 못하며 이것은 다른 모든 옵션에서도 발생합니다. 이전에는 잘 작동했습니다. 단순히 파일 처리기를 사용하고 인쇄하여 리디렉션합니다.
open FILE, ">>log.txt"
## DO some thing
print FILE $output;
어떤 사람이 문제가 무엇인지 말해 줄 수 있습니까?
파일 버퍼링 이 발생했습니다 . 이것은 대부분의 프로그래밍 언어가하는 정상적인 일입니다. 디스크 나 터미널에 쓰는 속도가 느리기 때문에 각 print 문이 반드시 즉시 기록되는 것은 아닙니다. 출력은 일반적으로 메모리에 저장되고 (즉, "버퍼링 됨") 특정 양이나 특정 문자에 도달하면 기록됩니다.
기본적으로 STDERR
는 버퍼링되지 않습니다. STDOUT
터미널에 대한 것은 일반적으로 줄 버퍼링입니다. 즉, 개행을 볼 때 쓰게됩니다. 파일은 일반적으로 시스템에 따라 4K 또는 8K 블록으로 버퍼링됩니다.
로그 파일의 경우이 버퍼링을 해제하는 것이 좋습니다. 모든 파일 핸들 그래서 사용, IO :: 핸들 방법에 응답 IO :: 핸들 방법을 autoflush
이 작업을 수행 할 수 있습니다.
# Because you've forgotten to check if the file opened.
use autodie;
open my $fh, ">>", $log_file;
$fh->autoflush(1);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다