我尝试在 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
工作,所以我无法真正排除故障。