Форум сайта python.su
Всем привет!
Есть вывод:
10.1.11.6
10.1.11.8
10.1.11.22
10.1.11.23
10.1.11.24
10.1.11.25
10.1.11.26
вывод может быть из 200 строк и более.
как задать вывод чтобы показывал например первые 5 строк. Например как mysql select * from user_log limit 2;
Офлайн
Можно код, который делает вывод?
Офлайн
regall
Можно код, который делает вывод?
a1 = raw_input("Input ipadd or vlan:")
def search():
if '10.' in a1:
a2 = '%s.%s.%s.' %(a1.split('.')[0],a1.split('.')[1],a1.split('.')[2])
host(a2)
elif not '.' in a1:
for fname in glob.glob('/etc/iptab/vlan%s.txt' %a1):
for line in open(fname):
if 'vlanident' in line:
a2 = '%s.%s.%s.' %((line.split()[5]).split('.')[0], (line.split()[5]).split('.')[1], (line.split()[5]).split('.')[2])
host(a2)
def host(a2):
for y in range(1,253):
host = '%s%s' %(a2, y)
date = fin(host)
if date:
ip = date
else:
ip = "[!IP_ADDRESS FREE!]"
res = '%s\t%s' %(host, ip)
if 'FREE' in res:
print res
def fin(host):
for fname in glob.glob('/etc/iptab/vlan*.txt'):
for line in open(fname):
if not '#' in line and host in line:
return line.split()[0]
Офлайн
if 'FREE' in res and y <=5:
print res
Офлайн
regallэтот код не выход из ситуации, т.к. y=1-252, следовательно если занято с 1-6 то вывода не будет.if 'FREE' in res and y <=5:
print res
Офлайн
def host(a2):
free_count = 0
for y in range(1,253):
host = '%s%s' %(a2, y)
date = fin(host)
if date:
ip = date
else:
ip = "[!IP_ADDRESS FREE!]"
res = '%s\t%s' %(host, ip)
if 'FREE' in res and free_count < 5:
free_count += 1
print res
Отредактировано (Март 10, 2010 12:38:53)
Офлайн
regallregall, Спасибо большое, еще и напомнил.def host(a2):
free_count = 0
for y in range(1,253):
host = '%s%s' %(a2, y)
date = fin(host)
if date:
ip = date
else:
ip = "[!IP_ADDRESS FREE!]"
res = '%s\t%s' %(host, ip)
if 'FREE' in res and free_count < 5:
free_count += 1
print res
Офлайн
А я бы такую утилиту на генераторах строил. Что-то типа:
def find_files(pattern):
if pattern.startswith('10.'):
yield '.'.join(pattern.split('.')[:-1])
elif not '.' in pattern:
for fname in glob.glob('/etc/iptab/vlan%s.txt' % pattern):
for line in open(fname):
if 'vlanident' in line:
yield '.'.join(line.split()[5].split()[:-1])
def find_ip(host):
for fname in glob.glob('/etc/iptab/vlan*.txt'):
for line in open(fname):
if not '#' in line and host in line:
return True
return False
def find_free_ip(prefix):
for n in xrange(1, 253):
ip = '%s.%d' % (prefix, n)
if not find_ip(host):
yield ip
import sys
pattern = sys.argv[1]
count = int(sys.argv[2])
for ip in (x for x,i in enumerate(find_free_ip(find_files(pattern))) if i < count):
print ip, "[!IP_ADDRESS FREE!]"
Офлайн
PooHсильно не тестировал, т.к. получил результат да и все. PooH, сейчас твой код посмотрю, я согласен может и корявый код, но так сказать чему научился, а дальше шлифовка мастерства и естественно критика и мнения других людей.
А я бы такую утилиту на генераторах строил. Что-то типа:Насколько я понял исходник автора, код естественно не тестировал :)def find_files(pattern):
if pattern.startswith('10.'):
yield '.'.join(pattern.split('.')[:-1])
elif not '.' in pattern:
for fname in glob.glob('/etc/iptab/vlan%s.txt' % pattern):
for line in open(fname):
if 'vlanident' in line:
yield '.'.join(line.split()[5].split()[:-1])
def find_ip(host):
for fname in glob.glob('/etc/iptab/vlan*.txt'):
for line in open(fname):
if not '#' in line and host in line:
return True
return False
def find_free_ip(prefix):
for n in xrange(1, 253):
ip = '%s.%d' % (prefix, n)
if not find_ip(host):
yield ip
import sys
pattern = sys.argv[1]
count = int(sys.argv[2])
for ip in (x for x,i in enumerate(find_free_ip(find_files(pattern))) if i < count):
print ip, "[!IP_ADDRESS FREE!]"
Офлайн
avdoshkinЯ про свой код говорил :) мне его просто не на чем проверить было
сильно не тестировал, т.к. получил результат да и все.
Офлайн