Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2013 10:45:50

nauman
От:
Зарегистрирован: 2009-10-28
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Вылет скрипта.

Нужна ваша помощь. Скрипт пингует локальную сеть с определенной переодичностью и при появлении нового подключения к сети открывается окно со списком подключенных машин и по таймеру окно автоматически закрывается. Проблема в том что, после третьего появления окна программа вылетает с ошибкой. Причем вылетает из разных ОС 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)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version