Yellow Leaf

Yellow Leaf


Поиск по сайту


Вход
Правила портала
Регистрация
Забыли пароль?
О команде проекта
Справка по оформлению постов


Последние комментарии к новостям и статьям
Re: С днём системного администратора!
Re: Вышел новый номер v10.07(2) компьютерного журнала UserAndLINUX.
Re: Отчет о первом "Runtu InstallFest" в Екатеринбурге
Re: OpenVPN сервер для офисного шлюза на FreeBSD
Re: Релиз Runtu LXDE 10.04!
Ещё комментарии >>>


Новые файлы
Debian: cue2tracks_0.2.11_all (Дополнение для CUE 2 Tracks v0.2.11)
Gentoo: cue2tracks-0.2.11 (Дополнение для CUE 2 Tracks v0.2.11)
CUE 2 Tracks v0.2.11
Jabber-Shell 20090303
EasySoft AutoRun 0.4.1


Новое на форуме
Движок сайта. версия 2.0
Нужен логопед, срочно
Словить процесс
проблемы с разделом жесткого диска
планировщик, веб интерфейс


Проекты
Jabber-Shell
Qmmp
QStarDict
PHPSAAdmin


 
   


Друзья сайта
 Open Kazan - Казанское сообщество пользователей OpenSource 


Посетителей с 08.09.2006

4671553


Внешний вид портала


RSS-Ленты
Новости
Файлы


 

   
  Яндекс цитирования  

«Жёлтый Лист» - cайт о мире юникс
Новости Форум Статьи Файлы Пользователи
   

Написание скриптов с графическим интерфейсом. Продолжение

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 (*)

Тогда мучайся с дебианом:)

[Ответить]


Содержание*:
=

При копировании материалов с этого сайта ссылка на источник обязательна! Уважайте труд авторов!


Если материалы с этого сайта оказались вам полезны - Вы можете поддержать этот проект переведя на его счёт любую сумму, какую сочтёте нужным.

рублей


Обратная связь


© 2006-2010 Вадим Калинников aka MooSE