gpt4 book ai didi

perl - 如何在 Perl 中捕获 rsync 进度消息?

转载 作者:行者123 更新时间:2023-12-01 05:48:59 29 4
gpt4 key购买 nike

我想从 Perl 脚本中捕获 rsync 进程发出的所有进度消息。在某些情况下,这是行不通的。

这是我使用的典型 rsync 命令行:

rsync -aL --verbose --progress --bwlimit=100 \
--include-from=/tmp/78hJ2eDCs1 \
--include '*/' --exclude '*' \
/srcdir/* \
hostname:/target/ 2>&1

如果我在 bash shell 中运行它,我会看到如下内容:

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 检测到输出句柄不是典型的控制台,要么以某种我没有捕获到的异常方式输出。 但是,更奇怪的是,如果我省略 --include 和 --exclude 过滤器,我可以很好地捕获状态消息。

有人知道发生了什么事吗?

最佳答案

perl 是否缓冲管道的输出?如果是这样,如果在打开 OUTPUT 句柄后,您可以使用 OUTPUT->autoflush(1); 关闭缓冲;

关于perl - 如何在 Perl 中捕获 rsync 进度消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673145/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com