Найти - Пользователи
Полная версия: Как остановить итерацию
Начало » Python для новичков » Как остановить итерацию
1
sanodin
Здравствуйте

Можно ли остановить итерацию или выхватить определенную(допустим пятую по счету,которую выводит переменная for line in a.readlines():) в цикле for

Надо только пятый элемент списка,вернее переменная line десять раз принимает разное значение,10 разных списков,как выхватить пятый список?Что бы выводился только пятый из десяти?
s0rg
a.readlines()[5]

# or

for i, line in enumerate(a.readlines()):
if i == 5:
break
?
А если a - это файл, то .readlines самый плохой вариант
sanodin
Чем дальше тем больше)))))
В общем надо что бы на выходе был входящий трафик
Если по простому то:
import os
a = os.popen("netstat -e")
for line in a.readlines():

print line
потом такой код:
import os

def ParseW(Str):
prevCh = ''
words = ['']
inQuote = False

for Ch in Str:
if(Ch==' ') and (prevCh!='\\') and (not inQuote):
if(len(words[len(words)-1])!=0):
words.append('')
else:
if(Ch=='"') and (prevCh!='\\') and (not inQuote):
if(len(words[len(words)-1])!=0):
words.append('')
words[len(words)-1] += Ch
inQuote = True
elif(Ch=='"') and (prevCh!='\\') and (inQuote):
words[len(words)-1] += Ch
words.append('')
inQuote = False
else:
words[len(words)-1] += Ch
prevCh = Ch

if(len(words[-1:][0])==0):
words.pop()

return words

a = os.popen("netstat -e ")
for i, line in enumerate(a.readlines()):
f=ParseW(line)
if i==5:
break




print f[1:-1]
netstat -e выводит под winxp

Статистика интерфейса

Получено Отправлено

Байт 7692470 1519298
Одноадресные пакеты 12395 11067
Многоадресные пакеты 145 155
Отброшено 0 0
Ошибки 0 0
Неизвестный протокол


Нужны только цифры входящего трафика
s0rg
я не понял какие именно цифры вам нужны
поэтому сделал так:
#coding: cp1251
from re import compile as re_compile
from subprocess import Popen, PIPE

SPACE_CUTTER = re_compile('\s{2,}')

def reap_data(cmd_out):
return dict(map(lambda a: (a[0], (int(a[1]), int(a[2]))),\
filter(lambda a: len(a)==3,\
map(SPACE_CUTTER.split,\
filter(lambda a: a,\
map(lambda a: a.strip(),\
cmd_out.split('\r\n')))))))

def exec_cmd(cmd_line):
process = Popen(cmd_line.split(), shell=False, stdout=PIPE)
stdout, stderr = process.communicate()
return stdout.decode('cp866')

out = exec_cmd('netstat -e')
info = reap_data(out)
sent, got = info[u'Байт']
print sent, got
sanodin
Супер….))))
Спасибо


а то уже голова кипела….
s0rg
если нужно чтобы консолька не ‘моргала’, сделайте shell=True
sanodin
Ок

Я сначала через WMI пытался FROM Win32_PerfFormattedData_Tcpip_NetworkInterface но там как то с байтами все запутанно…или я не понял
а через netstat проще……спасибо еще раз
sanodin
В итоге благодаря Вам собрал то что хотел, когда то делал под linux монитор трафика, взял оттуда алгоритм определения скорости в секунду кб,хотя может он и не совсем точный, еще под win xp не очень тестировал

#coding: cp1251
from re import compile as re_compile
from subprocess import Popen, PIPE
from Tkinter import *
import string

SPACE_CUTTER = re_compile('\s{2,}')

spisok1=[1,1,1,1]


def reap_data(cmd_out):
return dict(map(lambda a: (a[0], (int(a[1]), int(a[2]))),\
filter(lambda a: len(a)==3,\
map(SPACE_CUTTER.split,\
filter(lambda a: a,\
map(lambda a: a.strip(),\
cmd_out.split('\r\n')))))))

def exec_cmd(cmd_line):
process = Popen(cmd_line.split(), shell=True, stdout=PIPE)
stdout, stderr = process.communicate()
return stdout.decode('cp866')

def reader():
global label
while 1:
try:
out = exec_cmd('netstat -e')
info = reap_data(out)
sent, got = info[u'Байт']
kb = sent/1024

break
except:
continue

curtime = kb
a=int(spisok1[-1])
b=int(spisok1[-2])
spisok1.append(curtime)
curtime=a-b
speed=divmod(curtime, 1024)
del spisok1[0]
def cen(rub):
return "%i MB. %i KB." % (rub)


label["text"]="Speed: %s" %(cen (speed))
root.after(1000, reader)


root=Tk()
label=Label(root, text="******:")
label.pack(anchor=W)
reader()
root.title("Monitor Trafik")
root.mainloop()
собрал .exe с помощью cx_Freeze ,работает)))

Еще раз спасибо s0rg.

модули устанавливаю примерно как описано в этой статье,только установил дополнительно Microsoft Visual Studio 2008
http://rekoweb.ru/blog/248.html

собирал exe по этой статье
http://borisnote.wordpress.com/2010/01/04/python3-in-exe/

собирал pyinstaller-ом exe выходит один файл но процесс скрыт гуевого окна не видно хотя процесс есть, с его помощью уже раньше собирал но тогда просто интерфейс не нужен был, а cx-freeze много файлов, но потом собрал архив sfx и все
sanodin
Может есть у кого на уме другой алгоритм измерения скорости трафика в секунду?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB