Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Отображение хода процесса через yad/zenity  (Прочитано 2072 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tolik_

  • Автор темы
  • Активист
  • *
  • Сообщений: 335
    • Просмотр профиля
Имеется цикл while в котором выполняются куча команд "выхлоп" которых желательно видеть в терминале или в log файле. Но хочется прикрутить индикатор выполнения процесса. Выглядит примерно так
while [[ "$COUNTER" -lt "$element_count" ]]; do
...
...
  let COUNTER=COUNTER+1
  let "perc=100*COUNTER/element_count"
  echo $perc"%" 
done | yad --progress --image=gtk-execute --title="Выполнение сценария...." --width 500 --height 50 --auto-close --sticky --text="...." --center --no-buttons

Все конечно работает но "выхлоп" комад из тела цикла в терминал не попадает из-за "done | yad"
Как можно по другому организовать процесс вывода шкалы, что-бы остался в поле зрения (в терминале) и ход выполнения внутренних функций? Неплохо бы и в log файл иметь параллельный вывод.
PS: Да и при выполнении всей этой чепухи в конвейере из-за него "наружу" цикла не могу передать значения некоторых переменных.
« Последнее редактирование: 11 Сентября 2012, 14:32:41 от Tolik_ »

Оффлайн Zeka13

  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
Re: Отображение хода процесса через yad/zenity
« Ответ #1 : 13 Сентября 2012, 15:02:33 »
тоже интересен ответ
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Отображение хода процесса через yad/zenity
« Ответ #2 : 13 Сентября 2012, 15:17:29 »
for i in `seq 0 100`;do echo $i;echo '#'$i'%';sleep 1;done | zenity --progress --auto-close
« Последнее редактирование: 13 Сентября 2012, 15:21:40 от victor00000 »
Wars ~.o

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Отображение хода процесса через yad/zenity
« Ответ #3 : 14 Сентября 2012, 14:17:45 »
Можно размножить вывод
man tee

Можно организовать fifo
man mkfifo
и в другом потоке что-то делать с ним.

Можно приписывать в файл
...>>logfile

Можете сами продолжить
...
ЗЫ. В чем проблема, я что-то не понял.

Оффлайн Tolik_

  • Автор темы
  • Активист
  • *
  • Сообщений: 335
    • Просмотр профиля
Re: Отображение хода процесса через yad/zenity
« Ответ #4 : 14 Сентября 2012, 15:03:19 »
for i in `seq 0 100`;do echo $i;echo '#'$i'%';sleep 1;done | zenity --progress --auto-closeне пойдет. Мой код
while [[ "$COUNTER" -lt "$element_count" ]]; do
...
...
  let COUNTER=COUNTER+1
  let "perc=100*COUNTER/element_count"
  echo $perc"%" 
done | yad --progress --image=gtk-execute --title="Выполнение сценария...." --width 500 --height 50 --auto-close --sticky --text="...." --center --no-buttons
идентичен Вашему. Только Ваш записан в одну строку.
Проблема в том, что зенити и яд отображают процесс если их применять только в конвейере (внутри цикла мне их применить не получилось). Но конвеер "съедает" весь вывод ибо он сразу же направляется на вход зенити, которая берет себе нужную инфу с этого потока, а остальное пропадает в "пучине" ;D.
Просто хочется что-бы зенити присутствовала внутри цикла. Или как-то сделать так , что-бы в терминал попадала инфа от работы к примеру команды apt-get install, echo и т.д. которая будет внутри цикла. На крайний случай устраивает вариант когда результат работы apt-get install/remove/purge будет сливаться в какой-то лог файл для дальнейшего контроля или анализа. Примерно так
while [[ "$COUNTER" -lt "$element_count" ]]; do
...
  apt-get install $namePKG
  #Результат работы apt-get необходимо сохранить в лог файле (для зенити эта информация не нужна)
...
  let COUNTER=COUNTER+1
  let "perc=100*COUNTER/element_count"
  echo $perc"%"  #не отображается ибо попадает на вход зенити
done | yad --progress --image=gtk-execute --title="Выполнение сценария...." --width 500 --height 50 --auto-close --sticky --text="...." --center --no-buttons

Цитировать
Можно приписывать в файл
...>>logfile
Вы предлагаете так?
  apt-get install $namePKG >> $LogFile С tee че-то не разобрался. Может приведете примерчик или ссылку как ее правильно применить. Т.е. хочется что-бы она получила поток и раздала ее зенити и терминалу. И как это сделать в конвейере,  что-бы это устроило зенити. Ибо помимо вывода результата работы разного рода команд и функций в терминал из тела цикла надо будет выводить сообщения (результат анализа и работы). А echo съедается зенити.
« Последнее редактирование: 14 Сентября 2012, 15:16:52 от Tolik_ »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Отображение хода процесса через yad/zenity
« Ответ #5 : 14 Сентября 2012, 15:32:44 »
Вы предлагаете так?
  apt-get install $namePKG >> $LogFile
Да. Для чистоты эксперимента можно файл лога чистить (удалять).
С tee че-то не разобрался.
На примере попроще.
for i in `seq 0 100`;do echo $i;echo '#'$i'%';sleep 1;done | tee -a logfile | zenity --progress --auto-close
ЗЫ.
C fifo аналогично, только его надо предварительно создать и в него не надо приписывать, а просто надо писать.
« Последнее редактирование: 14 Сентября 2012, 15:37:56 от alexander.pronin »

Оффлайн Tolik_

  • Автор темы
  • Активист
  • *
  • Сообщений: 335
    • Просмотр профиля
Re: Отображение хода процесса через yad/zenity
« Ответ #6 : 14 Сентября 2012, 18:51:19 »
Цитировать
На примере попроще.
Таки да - намного.
Т.е. мы получаем одновременный выхлоп в лог файл и и зенити одной и той-же инфы.
А в терминал через tee можно направить вывод?

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Отображение хода процесса через yad/zenity
« Ответ #7 : 17 Сентября 2012, 08:07:03 »
Да.
tee - это тройник для выхлопа.
Никто не запрещает сделать так.
... | tee file1 | tee file2| tee file3 | ...
Терминал - в unix-образных системах тот же файл (как и все что угодно).
« Последнее редактирование: 17 Сентября 2012, 08:23:24 от alexander.pronin »

 

Страница сгенерирована за 0.022 секунд. Запросов: 21.