Форум сайта python.su
Привет всем, ребят помогите не могу понять, где косяк. Вот кусок Кода.
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)
Офлайн
в какой строке вы вызываете функцию parser?
Офлайн
FishHookДо того как перейти на экран Workscreen. Вот в этом куске
в какой строке вы вызываете функцию parser?
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)
Офлайн
Ребят в принципе я нашел причину, но не могу найти решение.
Если я сделаю кнопку и помещу в нее переменную с индексом то выбьет ошибку List out of range.
Но мне интересно ведь если я сделаю print(ip_list) то значения там все таки есть.
Вот и думу думаю ведь переменные то глобальные.
Офлайн
dradonТы не описал задачу. Сначала опиши задачу без какого-либо кода. Далеко не факт, что твой подход для её решения вообще правильный.
Ребят в принципе я нашел причину, но не могу найти решение.
dradonЭто ни о чём не говорит.
Парсинг, KIVY DROP LIST
Офлайн
py.user.nextЛадно простите, проблему решил, я пытался вывести значения прям в функции парсинга.
Офлайн