Рубрики
Без рубрики

Чтение данных о состоянии OpenVPN с Python (1 из 3)

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Я делаю 3 частию серии на использование WXPYPHON и PYWIN32 для захвата выхода с запущенного сеанса OpenVPN.

Я использую OpenVPN для подключения к ПК на работе. Я заметил, что наш текущий метод запуска OpenVPN был в консольном окне, чтобы можно было следить за выходом программы. Если пользователь произошел, чтобы закрыть указанное окно, оно закончится сеанс VPN. Я думал, что это было глупо, поэтому я решил, что попробую обернуть интерфейс, используя WxPython таким образом, что я могу минимизировать его на системный лоток и довести его обратно по требованию, чтобы проверить вывод, если у меня проблемы. Если вы хотите следить, то вам нужно следующее:

Получил все те? ОК. Давай продолжим. Для начала создайте папку, чтобы держать скрипты. На самом деле нам нужна пара, чтобы сделать это правильно.

Во-первых, мы собираемся создать значок системного лотка.

Шаг 1: Выберите значок (я использовал один из набора тамарина)

Шаг 2: После того, как у вас есть значок, мы будем использовать утилиту WXPYPHON, называемую IMG2PY, которая преобразует значок или изображение в файл Python. Он можно найти в вашей папке Python после установки WxPython: \\ Путь \ to \ python25 \ lib \ site-packages \ wx-2.8-MSW-Unicode \ WX \ Tools (отрегулируйте по мере необходимости для вашей системы)

Шаг 3: Переместите файл значка в каталог на шаге 2 и откройте окно команд, нажав кнопку «Пуск», «Запустить» и «Введите CMD». Перейдите к каталогу выше (используя команду CD) и выполните следующее: python img2py.py -i myicon.ico icon.py.

Шаг 4: Как только это сделано, скопируйте файл icon.py в папку, которую вы создали, чтобы удерживать сценарии. Это будет сопряжено с некоторым кодом, который обрабатывает значок и щелкните правой кнопкой мыши меню.

Теперь мы создадим логику, необходимую для значка системного лотка, чтобы ответить на события мыши. Я нашел какой-нибудь код в демонстрации WXPYPHON, который сделал большую часть того, что я сделал. Поэтому я скопировал его и немного изменил его, чтобы соответствовать моим потребностям. Вы можете увидеть конец результата ниже:

import wx
from vpnIcon import getIcon

class VPNIconCtrl(wx.TaskBarIcon):
    TBMENU_RESTORE = wx.NewId()
    TBMENU_CLOSE   = wx.NewId()
    TBMENU_CHANGE  = wx.NewId()
        
    def __init__(self, frame):
        wx.TaskBarIcon.__init__(self)
        self.frame = frame        

        # Set the image
        tbIcon = getIcon()

        # Give the icon a tooltip
        self.SetIcon(tbIcon, "VPN Status")
        self.imgidx = 1
        
        # bind some events
        self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.OnTaskBarActivate)
        self.Bind(wx.EVT_MENU, self.OnTaskBarActivate, id=self.TBMENU_RESTORE)
        self.Bind(wx.EVT_MENU, self.OnTaskBarClose, id=self.TBMENU_CLOSE)        

    def CreatePopupMenu(self):
        """
        This method is called by the base class when it needs to popup
        the menu for the default EVT_RIGHT_DOWN event.  Just create
        the menu how you want it and return it from this function,
        the base class takes care of the rest.
        """
        menu = wx.Menu()
        menu.Append(self.TBMENU_RESTORE, "View Status")
        menu.AppendSeparator()
        menu.Append(self.TBMENU_CLOSE, "Close Program")
        
        return menu

    def OnTaskBarActivate(self, evt):
        if self.frame.IsIconized():
            self.frame.Iconize(False)
        if not self.frame.IsShown():
            self.frame.Show(True)
        self.frame.Raise()

    def OnTaskBarClose(self, evt):
        self.Destroy()
        self.frame.Close()

В следующий раз мы перейдем к коду Win32, вам понадобится узнать, и в финальной части мы создадим графический интерфейс и поставим остальные части вместе.