Написание скриптов с графическим интерфейсом. Продолжение
| MooSE 2008-11-17 15:55:09 |
Ранее уже рассматривалась тема создания скриптов с графическим интерфейсом на базе утилиты kdialog, являющейся частью KDE. Но пользователям сред на базе GTK+ не всегда есть смысл устанавливать библиотеки KDE и потому им можно порекомендовать различные альтернативы на базе GTK+. Ниже будет рассмотрена одна из таких альтернатив - Zenity.
Zenity есть в большинстве современных дистрибутивов. Если же нет - его не сложно установить. Например в Debian/Ubuntu это делается командой:
apt-get install zenity
Впринципе для того чтобы разобраться с zenity вполне достаточно чтения man-страницы, однако всё же рассмотрим применение zenity на примере задач из предыдущей статьи.
Задача #1: скрипт для перекодирования файлов
Тут тоже ничего сложного, нам нужно запросить имя входного файла, имя выходного файла и кодировку входного файла. Опять же переходим сразу к готовму скрипту:
#!/bin/sh
# Получаем имя исходного файла
SRCFILENAME=`zenity --file-selection --title='Выберите файл, который надо перекодировать'`
# Если имя файла не пустое идём дальше
if ! [ -z ${SRCFILENAME} ]; then
# Получаем имя конечного файла
DSTFILENAME=`zenity --file-selection --save --confirm-overwrite --title='Выберите имя перекодированного файла'`
# Если имя файла не пустое идём дальше
if ! [ -z ${DSTFILENAME} ]; then
# Если конечный и начальный файл один и тот же -
# Завершаем скрипт с сообщением об ошибке
if [ ${SRCFILENAME} = ${DSTFILENAME} ]; then
zenity --error --text='Нельзя перекодировать файл сам в себя!'
exit 1
fi
# Запрашиваем кодировку исходного файла
# Список доступных кодировок получается из вывода команды iconv -l
ENCODING=`iconv -l | sed 's/\/\///'| awk '{ print $1;}'|sort |zenity --list --column='Кодировка' --text='Выберите кодировку исходного файла' --title='Выбор кодировки'`
# Если кодировка выбрана - перекодируем файл и сообщаем об
# успешном завершении скрипта
if ! [ -z ${ENCODING} ]; then
iconv -f ${ENCODING} -t utf-8 ${SRCFILENAME} > ${DSTFILENAME}
zenity --info --text='Перекодирование выполнено!'
fi
fi
fi
Видно, что скрипт получился достаточно простой, так что можно перейти к следующей задаче.
Задача #2: Проверка доступности сетевого ресурса.
Задача: периодически проверять доступность сетевого ресурса и уведомлять пользователя о его пропадании и последующем появлении. Тут нужно организовать вечный цикл и внутри него проверять доступность/недоступность ресурса. Скрипт будет выглядеть примерно вот так:
#!/bin/sh
# Ресурс, доступность которого нужно проверять.
PINGRESOURCE="ylsoftware.com"
# Файл, который будет создаваться если ресурс недоступен
LOCKFILE="/tmp/${PINGRESOURCE}.lock"
# Интервал (в секундах) между проверками
CHECKTIME=60
# Организуем бесконечный цикл
while true; do
# Если ресурс не доступен
if (! ping -c 3 ${PINGRESOURCE} > /dev/null 2> /dev/null) then
# Проверяем наличие временного файла
if (! test -f ${LOCKFILE}) then
# Если временный файл не существует - создаём его
# и оповещаем пользователя
touch ${LOCKFILE}
zenity --error --text='Ресурс недоступен!'
fi
# Если же доступен
else
# Проверяем наличие временного файл
if (test -f ${LOCKFILE}) then
# Если файл существует - удаляем его и оповещаем
# Пользователя о доступности
rm ${LOCKFILE}
zenity --info --text='Ресурс доступен!'
fi
fi
sleep ${CHECKTIME}
done
Дополнительные комментарии тут излишни. Как уже говорилось выше - более подробную информацию желающие могут подчерпнуть из man-страницы zenity.
Приятной работы!
Ссылки:
|
|
Ключевые слова: zenity bash
|
Версия для печати |
Возможно вас заинтересуют следующие товары:
Комментарии:
Ruslan 2008-11-19 02:28:53 (*)
Может, все из-за того, что спать хочу, - не могу найти источник ошибки: $ sh 1.sh 1.sh: line 20: syntax error near unexpected token `fi' 1.sh: line 20: ` fi'
[Ответить]
MooSE 2008-11-19 10:07:47 (*)
В каком именно скрипте эта ошибка возникает?
UPD: Нашёл ошибку. При постинге скрипт немного помяло. Сейчас поправил. Должно работать.
[Ответить]
Ruslan 2008-11-20 02:22:35 (*)
Кажется, ключ --confirm-overwrite не поддерживается в debian etch Во всяком случае, так пишет слегка модернизированный скрипт: $ sh 1.sh Получаем имя конечного файла Этот параметр недоступен. Используйте --help для просмотра всех возможных параметров. Если имя файла не пустое идём дальше
Убрал этот ключ: $ sh 1_sh Получаем имя конечного файла Если имя файла не пустое идём дальше Если конечный и начальный файл один и тот же - Завершаем скрипт с сообщением об ошибке Запрашиваем кодировку исходного файла Список доступных кодировок получается из вывода команды iconv -l Если кодировка выбрана - перекодируем файл и сообщаем об успешном завершении скрипта
:-)
[Ответить]
MooSE 2008-11-20 11:13:26 (*)
Хм. Debian у тебя какой версии?:)
Просто я обленился настолько, что вообще на убунте сижу а Debian вижу только на серверах, где иксов просто нет. Так что проверить не получится:)
[Ответить]
Ruslan 2008-11-22 00:48:13 (*)
Обычный. :-) 4.0
Подозреваю, что самое интересное появится в lenny. Но его у меня нет с иксами. Только на серверах. :)
[Ответить]
MooSE 2008-11-22 12:59:32 (*)
Я тут поимел радость ставить zoneminder. Короче он вообще только в sid есть:)
Зато обновление с etсh на sid прошло вообще легко и безболезненно:)
[Ответить]
Ruslan 2008-11-23 14:39:00 (*)
Я тут поимел счастье обновиться с sid до etch, вот это действительно счастье. ;-)
На работающем сервере и всё такое. :)
[Ответить]
MooSE 2008-11-23 17:39:46 (*)
В смысле ты откатился назад? Зачем?:)
[Ответить]
Ruslan 2008-11-24 19:50:45 (*)
по двум причинам: 1) я люблю делать #aptitude dist-upgrade а тут не наделаешься, если месяц-два позабиваешь.
2) я не люблю часами разгадывать клубки зависимостей
Кстати, есть какое-нибудь средство, которое умеет строить и разгадывать мульти-пространственный граф, описывающий зависимости приложения? :-)
Строить по зависимостям каждого отдельного пакета, а разгадывать методом обхода. При этом, будет показано, что пострадает, буду галкой указывать "не надо его страдать" и оно будет предлагать следующий вариант за вычетом вариантов, в которых старадает только что отмеченный пакет.
Почти, как aptitude, но тот не умеет эти за вычетом хорошо обрабатывать.
[Ответить]
MooSE 2008-11-25 14:13:51 (*)
Да вам батенька на генту надо:)
Там есть команда:
$ emerge -apvt foobar
которая перед установкой нарисует тебе полное дерево зависимостей и даже с флагами:)
[Ответить]
Ruslan 2008-11-25 20:35:43 (*)
Что-то пока не тянет. :-)
[Ответить]
MooSE 2008-11-25 21:22:14 (*)
Тогда мучайся с дебианом:)
[Ответить]
|