Perl 스크립트에서 rsync 프로세스에 의해 생성 된 모든 진행 메시지를 캡처하고 싶습니다. 특정 상황에서 이것이 작동하지 않습니다. 내가 bash 쉘 내에서이 작업을 실행하면Perl에서 rsync 진행 메시지를 어떻게 캡처 할 수 있습니까?
rsync -aL --verbose --progress --bwlimit=100 \
--include-from=/tmp/78hJ2eDCs1 \
--include '*/' --exclude '*' \
/srcdir/* \
hostname:/target/ 2>&1
것은, 나는 이런 식으로 뭔가를 볼 수 있습니다 : 여기
은 내가 사용하는 전형적인 rsync를 명령 행의Building file list ...
1600 files...
1700 files...
and so on
나는 같은 명령을 시도하는 경우 Perl 내에서 "건물 파일 목록"출력이 정상적으로 표시되지만 상태는 업데이트되지 않습니다. 여기에 내가
my $pid = open(OUTPUT, "$cmd |") or die "Couldn't fork: $!\n";
my $ch;
while(read(OUTPUT, $ch, 1)==1)
{
print $ch;
}
close(OUTPUT);
내 생각은 rsync를 하나가 일반적인 콘솔없는 출력 핸들을 감지, 아니면 캡처 아니에요 몇 가지 특이한 방식으로 출력되는 점이다 캡처를 테스트하는 방법입니다. 그러나, 심지어 odder를 만드는 것은 --include와 --exclude 필터를 생략하면 상태 메시지를 제대로 캡처 할 수 있다는 것입니다.
무슨 일이 일어나는가에 대한 단서가 있습니까?
두 답변이 이미 제공된 후에 rsync가 출력을 버퍼링하기 위해 수행하는 작업이라고 추측합니다. 결국 출력을 모두 얻었습니까? –