- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
#! /usr/bin/python2.4
# -*- coding: utf-8 -*-
'''
from Tkinter import *
import subprocess
import Queue
import threading
class ifStatThreadClass(threading.Thread):
"""класс потока с ifstat"""
def __init__(self,breakCount):
global listBox
selectedIface=listBox.curselection()
if not selectedIface: selectedIface=0
self.ifaceName=listBox.get(selectedIface);
self.breakCount=breakCount
threading.Thread.__init__(self)
def run(self):
global queue
global stop_event
# рабочий тред, запускает ifstat на вывод 20 строк
global listBox
cmd="ifstat -i %s 1 %s"% (self.ifaceName, self.breakCount,)
print "Запускаю: %s"%cmd
PIPE = subprocess.PIPE
p = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE,
stderr=subprocess.STDOUT, close_fds=True)
#пока нет стоп-события ловим строки из стдоута
if (stop_event.is_set()): print "stop event detected!"
while not stop_event.is_set():
s = p.stdout.readline()
if not s: break
if self.breakCount==0: break
self.breakCount-=1
#кладем очередную строку в очередь
queue.put(s)
print s,
def startIfStat():
""" стартуем рабочий тред"""
global stop_event
global ifStatThread
ifStatThread = ifStatThreadClass(10)
try:
stop_event.clear()
ifStatThread.start()
except:
print "Не могу запустить поток! Может, он уже запущен?"
stop_event.set()
#вот тут стартуем
def stopWorker():
"""создаем стоп-событие"""
print("Тпырррр!")
global stop_event
global ifStatThread
# установим событие останова
stop_event.set()
def ifStatResultUpdater():
"""обновлялка текстового поля из очереди query"""
global queue
global stop_event
global ifStatResult
global ifStatThread
global emptyQueueCounter
# print("updater")
# ifStatResult.configure(text=time.strftime('%H:%M:%S'))
#только если не было стоп-события
if not stop_event.is_set():
if ifStatThread.isAlive(): print "Поток еще жив!"
else: print "Потока в живых не обнаружено"
s=''
try:
#берем из очереди строку и выводим на лейбл
print 'Что у нас в очереди? ',
s = queue.get_nowait()
print "а в очереди вот:",s
ifStatResult.configure(text=s)
except Queue.Empty:
print('ничего в очереди нету(')
if (emptyQueueCounter>2):
print('аааа.. похоже, все умерли... щас заново запущу!')
startIfStat()
emptyQueueCounter=0
emptyQueueCounter+=1
#если стоп-события не было, запускаем эту же функцию через секунду
root.after(1000,ifStatResultUpdater)
queue = Queue.Queue() #создаем очередь
emptyQueueCounter=0
Мой первый (мало-мальÑки Ñерьезный) опыт на питоне. Выводит ÑпиÑок из 3Ñ… интерфейÑов, по нажатию Старт запуÑкает тред Ñ Ð¸Ñ„Ñтатом, выводит в окошко результаты. Кривинько-коÑо, но работает)
ЕÑли еÑÑ‚ÑŒ Ð·Ð°Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ ÐºÐ°Ðº криво напиÑано и Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÐ°Ðº лучше, жду комментарии.
P.S. до Ñтого пиÑал на пхÐ%BF, D1‚ак что не пинайте Ñильно)
hakimovis 23.01.2011 00:17 # 0
WGH 23.01.2011 00:37 # +2
hakimovis 23.01.2011 00:44 # 0