Форум сайта python.su
Нужна ваша помощь. Скрипт пингует локальную сеть с определенной переодичностью и при появлении нового подключения к сети открывается окно со списком подключенных машин и по таймеру окно автоматически закрывается. Проблема в том что, после третьего появления окна программа вылетает с ошибкой. Причем вылетает из разных ОС Win7 и Linux. Думаю, что проблема связана с моим кодом графического интерфейса WX модуля.
Код ошибки в винде:
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: python.exe
Версия приложения: 0.0.0.0
Отметка времени приложения: 4f84a524
Имя модуля с ошибкой: wxmsw28uh_core_vc.dll
Версия модуля с ошибкой: 2.8.12.1
Отметка времени модуля с ошибкой: 4e21188a
Код исключения: c0000005
Смещение исключения: 00000000001129d3
Версия ОС: 6.1.7601.2.1.0.256.1
В линуксе, в консоли следующее сообщение:
Segmentation fault (core dumped) ------------------ (program exited with code: 139) Press return to continue
#!/usr/bin/python #-*- coding: UTF-8 -*- import os, ipaddr, wx if os.name == 'nt': import subprocess from time import sleep class TextFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, size=(80, 200), style=(wx.DEFAULT_FRAME_STYLE ^ (wx.RESIZE_BORDER | wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.SIMPLE_BORDER))) panel = wx.Panel(self, -1, style=wx.NO_BORDER) panel.SetBackgroundColour(wx.BLACK) panel.SetForegroundColour(wx.GREEN) my_text = '' for item in online: my_text = my_text + item + '\n' basicLabel = wx.StaticText(panel, -1, my_text) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer) self.timer.Start(10000) def OnTimer(self, evt): self.Close(True) def StartGui(): app = wx.PySimpleApp() frame = TextFrame() frame.Show() app.MainLoop() my_net = ipaddr.IPv4Network('192.168.1.0/28') my_ip = '192.168.1.2' buf = [] while True: online = [] for cur_ip in my_net.iterhosts(): cur_ip = str(cur_ip) if my_ip != cur_ip: if os.name == 'nt': ping = subprocess.Popen(["ping", '-n', '1', cur_ip], stdout = subprocess.PIPE, stderr = subprocess.PIPE) ans, error = ping.communicate() if 'TTL=' in ans: online.append(cur_ip) else: p = os.popen('ping -c 1 ' + cur_ip) ans = p.read() p.close() if 'ttl=' in ans: online.append(cur_ip) a = [new_ip for new_ip in online if new_ip not in buf] buf = online if a: StartGui()
Отредактировано nauman (Апрель 14, 2013 10:56:44)
Офлайн