如何在 cclive 中使用 zenity 进度条

如何在 cclive 中使用 zenity 进度条

我尝试在 cclive 中使用 zenity 进度条。我正在编写一个脚本来下载网络视频文件,我想查看下载的进度。

但是当我尝试类似的事情时

$cclive <url> 2>&1 | zenity --progress

但当我执行命令行时,它似乎不起作用。有什么想法可以做到这一点吗?

BR,

[编辑]

cclive 有这种输出:

cclive http://www.youtube.com/watch?v=youtubevideo

Checking ... .......... ..........done.
youtubevideo.flv 2.5M 75.8K/s 00:09:29 5% 

所以我需要将最后一部分发送给 sdout,但我不知道怎么做。此外,关于 pulsate,我们无法使用此选项查看进度,而我真的需要它……所以我不会将 pulsate 用于此脚本。


认为| zenity --progress命令后的粘贴 - 将不起作用。

您知道它仅在下载结束时才加载。

我尝试使用带--percentage参数的 zenity,并且我知道检查进程状态的最佳方法。

在我的脚本中我知道文件的大小。

size_t=$theoretical_size_of file     # I don't know where are from you take FULL size     of your file. I know it in myself script.
size_r=`du -b /tmp/$filename`
perc=$[$size_t/$size_r*100] 

我应该在哪里写zenity --progress --percentage=$perc

而且我认为它应该是一个循环,导致du -b不断变化......

答案1

我不知道它是如何cclive工作的,但为了显示zenity进度条,它需要将百分比发送到标准输出。

以下是一个例子:

# This works:
(for i in $(seq 0 3 100); do echo "$i"; sleep 0.1; done) | zenity --progress

# This doesn't:
(for i in $(seq 0 3 100); do echo "hi"; sleep 0.1; done) | zenity --progress

除非你能安排cclive好,否则你只能接受

zenity --progress --pulsate

编辑

根据评论,这里有一些额外的信息。我无法给你一个确切的答案,因为显然cclive在 Maverick 上坏了。无论如何,我只有在尝试使用它时才会遇到错误。

您需要做的第一件事是打印cclive某个百分比。我假设日志文件将打印这样的百分比,但我无法测试它。然后,您需要解析该输出并将其发送到zenity。这是一个示例(未经测试,或当然)脚本:

#!/bin/bash

url="$1"
tmp="/tmp/cclive.log"

mkfifo "$tmp"
cclive --background --logfile="$tmp" "$url"
egrep '[0-9]+%$' < "$tmp" | zenity --progress
rm "$tmp"

如果cclive的输出格式不同,只需适当调整脚本即可。如果cclive没有将百分比转储到日志文件,请尝试将cclive命令更改为:

cclive "$url" > "$tmp" &

最后一件事:您可能不应该将 stderr 发送到 stdout ( 2>&1)。Zenity 将使用 stdout,但您可能不希望它吞噬所有错误消息。

编辑2

您可能需要awk在管道中的某个地方添加内容,以便隔离百分比。基本语法是:

awk '{print $1}' # change $1 to the correct space-separated field

在测试中,我无法使其正常工作,但由于我无法使其cclive工作,所以我无法真正排除故障。

相关内容