Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 18, 2019 14:11:02

dradon
От: Симферополь
Зарегистрирован: 2019-11-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг, KIVY DROP LIST

Привет всем, ребят помогите не могу понять, где косяк. Вот кусок Кода.
1.Я получаю данные с файла, split методом убираю пробелы и методом append добавляю в list_wes.
Далее я его разпарсиваю и помещаю в другой список ip_list. Все работает я проверял, вывод верный через print. Показывает Данные. Но почему то когда я создаю кнопки, а мне надо для каждого елемента создать ее, они не создаюся.!!!
Но если в ip_list указать явно елементы например

 ip_list=['192.168.0.1','192.168.0.10','192.168.0.14]
итд то все в норме, кнопки без проблем создаются.
Почему не создаются кнопки хотя данные в списке имеются ??

 list_wes = []
ip_list = []
def parser():
    cmd='ip dhcp-server lease print detail'
    ssh=paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(ip,port,username,password)
    stdin,stdout,stderr=ssh.exec_command(cmd)
    BOOK = stdout.readlines()
    res =''.join(BOOK)
    text = res.split()
    for i in text:
        list_wes.append(i)
    for x in list_wes:
        if x[0:8] == 'address=':
            ip_list.append(x[8:])
    print(ip_list)
#вывод списка 
['172.20.26.5', '172.20.26.6', '172.20.26.16', '172.20.26.17', '172.20.26.18', '172.20.26.20', '172.20.26.21', '172.20.26.32']
class Workscreen(Screen):
    def __init__(self, **kwargs):
        super(Workscreen, self).__init__(**kwargs)
        start = BoxLayout(orientation='vertical', size_hint=(0.4, 0.3), padding=8,
                          pos_hint={'top': 0.9, 'center_x': 0.5})
        drop_down = Button(text=str('Выберите Точку'), size_hint_y=None, height=70, on_press=self.drop)
        start.add_widget(drop_down)
        self.dropdown = DropDown(auto_dismiss=False)
        listas = ip_list
        for i in listas:
            btn = Button(text=i, size_hint_y=None, height=44)
            btn.bind(on_release=lambda btn: self.dropdown.select(btn.text))
            self.dropdown.add_widget(btn)
        self.add_widget(start)
    def drop(self, drop_down):
        self.dropdown.open(drop_down)

Отредактировано dradon (Ноя. 18, 2019 14:16:59)

Офлайн

#2 Ноя. 18, 2019 14:19:14

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Парсинг, KIVY DROP LIST

в какой строке вы вызываете функцию parser?



Офлайн

#3 Ноя. 18, 2019 15:39:35

dradon
От: Симферополь
Зарегистрирован: 2019-11-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг, KIVY DROP LIST

FishHook
в какой строке вы вызываете функцию parser?
До того как перейти на экран Workscreen. Вот в этом куске
     def connect(self, instance):
        username.clear()
        username.append(self.login.text)
        password.clear()
        password.append(self.passwords.text)
        ip2 = str(ip[0])
        port2 = port
        username2 = str(username[0])
        password2 = str(password[0])
        command = os.system('ping '+ ip2 + ' -n 1')
        if command == 0:
            try:
                ssh = paramiko.SSHClient()
                ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
                ssh.connect(ip2, port2, username2, password2)
                shell = ssh.invoke_shell()
                parser()    #<<<<<<<вот вызов (иначе говоря список наполняется до того как перейти на экран)
                self.manager.current = 'workscreen'
            except paramiko.AuthenticationException:
                error = Button(text=str('     Данные не верны! \n Введите Логин и Пароль'), size_hint=(0.4, 0.3),
                               pos_hint={'top': 0.4, 'center_x': 0.5})
                self.add_widget(error)
                shell = None
        else:
            error2 = Button(text=str('Нет связи с хостом!'), size_hint=(0.4, 0.3),
                           pos_hint={'top': 0.4, 'center_x': 0.5})
            self.add_widget(error2)
    def callback(self, instance):
        username.clear()
        password.clear()
        ip.clear()
        self.login.text = ''
        self.passwords.text = ''
        self.manager.current = 'functionScreen'

Отредактировано dradon (Ноя. 18, 2019 16:18:22)

Офлайн

#4 Ноя. 19, 2019 10:28:18

dradon
От: Симферополь
Зарегистрирован: 2019-11-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг, KIVY DROP LIST

Ребят в принципе я нашел причину, но не могу найти решение.
Если я сделаю кнопку и помещу в нее переменную с индексом то выбьет ошибку List out of range.
Но мне интересно ведь если я сделаю print(ip_list) то значения там все таки есть.
Вот и думу думаю ведь переменные то глобальные.

Офлайн

#5 Ноя. 20, 2019 07:48:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Парсинг, KIVY DROP LIST

dradon
Ребят в принципе я нашел причину, но не могу найти решение.
Ты не описал задачу. Сначала опиши задачу без какого-либо кода. Далеко не факт, что твой подход для её решения вообще правильный.

Без описания задачи это выглядит так: “Я тут пишу какую-то вещь. Я примерно представляю, что я пытаюсь сделать. Написал вот этот код для решения этой вещи. Скажите, где у меня ошибка?”. Тут-то и возникает вопрос “а что ты пытаешься написать вообще, что за вещь?”

dradon
Парсинг, KIVY DROP LIST
Это ни о чём не говорит.



Офлайн

#6 Ноя. 22, 2019 13:30:29

dradon
От: Симферополь
Зарегистрирован: 2019-11-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг, KIVY DROP LIST

py.user.next
Ладно простите, проблему решил, я пытался вывести значения прям в функции парсинга.
Сделав функцию вывода глобальной я решил проблему.
ВСЕМ СПАСИБО

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version