go - 如何在 Golang 中连续解析 rsync 进度?
问题描述
exec.Command("rsync", "-ah --info=progress2 src dst")
执行,这rsync
将连续产生以下结果:
3.76G 100% 515.60MB/s 0:00:06 (xfr#1, to-chk=0/1)
那么,如何连续解析 rsync 进度呢?谢谢!
下面是我的代码:
func CopyWithProgress(src, dst string) {
cmd := exec.Command("rsync", fmt.Sprintf("-a --info=progress2 %s %s", src, dst))
stdout, err := cmd.StdoutPipe()
if err != nil {
log.Fatal(err)
}
if err = cmd.Start(); err != nil {
log.Fatal(err)
}
go func(scanner *bufio.Reader) {
percentMatcher := progress.NewMatcher(`(\d+\%)`)
etaMatcher := progress.NewMatcher(`(\d+\:\d+\:\d+)`)
speedMatcher := progress.NewMatcher(`(\d+\.\d+.{2}\/s)`)
for scanner.Scan() {
logStr := scanner.Text()
fmt.Printf("Progress=%v\n", logStr)
}
}(bufio.NewScanner(stdout))
if err = cmd.Wait(); err != nil {
log.Fatal(err)
}
}
但我无法scanner
扫描 rsync 的输出。
解决方案
要获取命令的流输出:检查Cmd.StdoutPipe()
,以及文档中的示例代码。
要逐行读取文本输出:您可以使用 a bufio.Scanner
(再次检查示例)。
推荐阅读
- angular - 功能单元测试中未涵盖的 if 语句 - Jasmine
- python - 在 dask.read_sql_table 中添加 application_name 作为参数时出错
- java - 如何使用设置首选项禁用通知?
- ffmpeg - 如何在 Windows 10 上的 ffmpeg 中从 yuyv422 切换到 yuv420p 以获得更好的帧率
- python-3.x - Windows 10 上的 Pyinstaller 找不到子包/模块
- mosquitto - 如何通过 HTTP 监控 mosquitto 服务器
- scala - 如何使用 partitionBy 调整保存操作
- android - 使用 RefreshToken 更新 Cognito IDToken
- javascript - 在nodejs中添加新键后如何复制2个对象
- php - 数据未使用functions.php中的代码插入自定义表中