Я пытался использовать индикатор прогресса zenity с cclive. Я пишу сценарий для загрузки файлов веб-видео и хочу увидеть ход загрузки.
Но когда я пытаюсь что-то вроде
$cclive <url> 2>&1 | zenity --progress
Но когда я запускаю командную строку, но это не похоже на работу. Любая идея о том, как я могу это сделать?
BR,
[Edit]
cclive имеют такой вид вывода:
cclive http://www.youtube.com/watch?v=youtubevideo
Checking ... .......... ..........done.
youtubevideo.flv 2.5M 75.8K/s 00:09:29 5%
Так что я нужно отправить последнюю часть в sdout, но я не знаю как. И еще, что касается пульсаций, мы не можем видеть прогресс этой опции, и мне это действительно нужно ... Так что я не буду использовать пульсат для этого сценария.
считают, что вставка | zenity --progress
после команд не будет работать.
Вы знаете, что он загружается только в конце загрузки.
Я пытаюсь использовать zenity с параметром --percentage
, и я знаю лучший способ проверить состояние процесса.
В моем скрипте я знаю размер файла.
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
постоянно меняется ...
Я не знаю, как работает 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
не работает на Маверике. Во всяком случае, я получаю ошибки только при попытке его использовать.
Первое, что вам нужно сделать, это заставить cclive
напечатать процент где-нибудь. Я предполагаю, что файл журнала будет печатать такой процент, но я не могу проверить это. Затем вам нужно проанализировать этот вывод и отправить его в zenity
. Вот пример (непроверенный, или курс) сценария:
#!/bin/bash
url="$1"
tmp="/tmp/cclive.log"
mkfifo "$tmp"
cclive --background --logfile="$tmp" "$url"
egrep '[0-9]+% Если вывод cclive
имеет другой формат, просто отрегулируйте сценарий соответствующим образом. Если cclive
не выгружает проценты в лог-файл, попробуйте изменить команду cclive
на:
cclive "$url" > "$tmp" &
И последнее: вам, вероятно, не следует отправлять stderr из stdout (2>&1
). Zenity будет использовать стандартный вывод, но вы, вероятно, не хотите, чтобы он принимал все сообщения об ошибках.
Редактировать 2
Возможно, вам придется добавить awk
где-нибудь в конвейере, чтобы вы могли выделить процент. Основной синтаксис:
awk '{print $1}' # change $1 to the correct space-separated field
При тестировании я не мог заставить его работать правильно, но так как я не могу заставить cclive
работать, я не могу действительно устранить его.
< "$tmp" | zenity --progress
rm "$tmp"
Если вывод cclive
имеет другой формат, просто отрегулируйте сценарий соответствующим образом. Если cclive
не выгружает проценты в лог-файл, попробуйте изменить команду cclive
на:
cclive "$url" > "$tmp" &
И последнее: вам, вероятно, не следует отправлять stderr из stdout (2>&1
). Zenity будет использовать стандартный вывод, но вы, вероятно, не хотите, чтобы он принимал все сообщения об ошибках.
Возможно, вам придется добавить awk
где-нибудь в конвейере, чтобы вы могли выделить процент. Основной синтаксис:
awk '{print $1}' # change $1 to the correct space-separated field
При тестировании я не мог заставить его работать правильно, но так как я не могу заставить cclive
работать, я не могу действительно устранить его.