rsyncプロセスによって生成されたすべての進行状況メッセージをPerlスクリプトから取得します。状況によっては、これは機能しません。ここでPerlでrsyncの進行状況メッセージを取得するにはどうすればよいですか?
は、私が使用して、典型的なrsyncコマンドラインです:
rsync -aL --verbose --progress --bwlimit=100 \
--include-from=/tmp/78hJ2eDCs1 \
--include '*/' --exclude '*' \
/srcdir/* \
hostname:/target/ 2>&1
私はbashシェルの中にこれを実行すると、私はこのような何かわかります。私は、同じコマンドをしようとした場合
Building file list ...
1600 files...
1700 files...
and so on
をPerl内では、 "ビルドファイルリスト"出力はOKですが、ステータスは更新されません。ここで私は
my $pid = open(OUTPUT, "$cmd |") or die "Couldn't fork: $!\n";
my $ch;
while(read(OUTPUT, $ch, 1)==1)
{
print $ch;
}
close(OUTPUT);
キャプチャをテストする方法です私の推測では、どちらかのrsyncは、出力ハンドルを感知することで、一般的なコンソールではないか、私はキャプチャしていないよ、いくつかの珍しい形で出力されています。 しかし、それをさらに奇妙にするのは、--includeおよび--excludeフィルタを省略すると、ステータスメッセージをうまくキャプチャできることです。
何が起こっているかについての手がかりはありますか?
2つの回答が既に提供されていると、私はrsyncが出力をバッファするために何かしていると推測しています。最後にすべての出力を得ますか? –