2012-08-10 2 views
0

인터넷 연결이 필요한 wxpython 앱을 만들고 있습니다. 그래서 연결이 있는지 확인해야합니다. 그렇지 않으면 종료하십시오. 그래서 내 코드는 이렇게 보입니다.연결을 확인하고 사용 가능한 연결이 없을 경우 종료하십시오

class Example(wx.Frame): 

    def __init__(self, parent, title): 
     super(Example, self).__init__(parent, title=title, 
      size=(700,650)) 
     self.InitUI() 
     self.Centre() 

#*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*. 
#-------------------------------------------------------------------------------- 

     favicon = wx.Icon(ICON_PATH, wx.BITMAP_TYPE_ICO) 
     wx.Frame.SetIcon(self, favicon) 
     self.Show()  

    def InitUI(self): 
     #checkConnection() 
     checkInstances() 

     panel = wx.Panel(self) 

     font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT) 
     font.SetPointSize(9) 

     font1 = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT) 
     font1.SetPointSize(10) 

#Layout 

     vbox = wx.BoxSizer(wx.VERTICAL) 

     hbox1 = wx.BoxSizer(wx.HORIZONTAL) 
     st1 = wx.StaticText(panel, label='Select Slot :') 
     st1.SetFont(font1) 
     hbox1.Add(st1, flag=wx.ALL, border=8) 

     try: 
      handler = urllib.urlopen("http://%s/api/get-slots/?api_key=%s"%(BASE_DOMAIN, API_KEY)) 
     except: 

      wx.MessageBox("Error communicating with the server.", 'WARNING',wx.OK |wx.ICON_INFORMATION) 
      handler = None 
      sys.exit(0) 

그래서 내가 (일부 링크) 위의 링크를 확인하려면, 그리고 실패하면, 나는 메시지 상자를 표시 한 다음 I 종료합니다. 내가 (OFF 인터넷으로)이를 실행하면 앱이 메시지를 표시 않으며, 클릭 한 후 확인을, 또 다른 역 추적 상자 인쇄

SystemExit:0 

그것은 실제로 종료하지 열립니다. 자기를 사용해 보았습니다. 닫습니다. 그건 너무 효과가 없습니다. 앱을 실행하자마자 체크 연결 기능을 만드는 것에 대한 생각.

def checkConnection(): 

    try: 
     test = urllib.urlopen("http://www.google.com") 
    except: 
     sys.exit(0) 

이이 같은 일을했다

def InitUI(self): 
     checkConnection() 
     ......... 
     ......... 

에 그것을 배치. 그래서 인쇄를 피할 수있는 방법이 있습니까 및 실제로 종료합니까?

os._exit 그러나 나는 단지 sys.exit도 효과가 있어야한다고 생각했습니다. 그래서 어떤 힌트 녀석들?

+1

일반적으로 'except : except'를 사용하는 것은 나쁜 습관으로 간주됩니다. 예외를 제외하고는 예외를 제외하고 예외 클래스 나 예외 클래스를 예외로 사용해야합니다. 예외 코드는 예외입니다. –

답변

1

대신 sys.exit (또는 os._exit는)

self.Destroy() 

os._exit

어떤 정리 핸들러를 호출하고 일반적으로 ( halt child processes after a fork 제외) 사용할 수 없습니다없이 갑자기 프로세스를 중단 사용합니다.

sys.exit은 SystemExit 예외를 발생시킵니다. wxpython이 예외를 포착하고 앱을 종료하지 않고 오류 메시지를 인쇄하도록 선택해야합니다.

self.Destroy()은 앱을 종료해야합니다.


try: 
    test = urllib.urlopen("http://www.google.com") 
except IOError: 
    wx.MessageBox("Error communicating with the server.") 
    self.Destroy() 
0

종료 wx.GetApp().Exit()를 호출하여 wx.App 이벤트 루프.

+0

확실히 사용해 보겠습니다. –

관련 문제