[英]Pop up message box after connecting to SSH
大家好,我正在學習Python並使用wxPython創建GUI模型。
我想連接VAI SSH,為此我使用了pexpect。 我想顯示一個味精框,上面寫着“已連接到服務器”,或者如果斷開連接則顯示“未建立連接”,我不知道該怎么做,並且GUI在連接時會凍結。 如何避免凍結GUI? 我的示例代碼是:
import time
import sys
import pexpect
c = pexpect.spawn("ssh -Y -L xxxx:localhost:xxxx user @ host.com")
#time.sleep(0.1)
c.expect("[pP]aasword")
c.sendline("xxxxxx")
#time.sleep(0.2)
c.interact()
c.pexpect([user@host.com~]$)
在此處連接到SSH后,GUI凍結。 連接后,我想在消息框中而不是在終端中顯示連接狀態。 請建議如何做; 作為一個初學者,我覺得很難。
提前致謝。
import wx
import os
import pexpect
import sys
import subprocess
import time
class Connect_ssh(wx.Frame):
def __init__ (self, *args, **kw):
wx.Frame.__init__(self,None,wx.ID_ANY,"Secure Shell", size=(310,200),style=wx.DEFAULT_FRAME_STYLE ^ wx.MAXIMIZE_BOX ^ wx.RESIZE_BORDER)
panel = wx.Panel(self)
txt1 = wx.StaticText(panel, label="Account name:",pos=(20, 55))
txt2 = wx.StaticText(panel, label="Password",pos=(20, 105))
self.txt_name = wx.TextCtrl(panel, -1, size=(130, -1), pos=(160,50))
self.txt_pswd= wx.TextCtrl(panel, -1, size=(130, -1),pos= (160,100),style=wx.TE_PASSWORD)
button1 = wx.Button(panel, -1, "Connect",size=(-1,-1), pos=(50, 160))
button2 = wx.Button(panel, -1, "Disconnect",size=(-1,-1), pos=(170, 160))
self.Bind(wx.EVT_BUTTON,self.OnConc,button1)
def OnConc(self,event):
u_name = self.txt_name.GetValue()
passwd = self.txt_pswd.GetValue()
child = pexpect.spawn("ssh -Y -L xxx:localhost:xxx %s@host.com" % (str(u_name)))
child.expect("%s@host.com's password:" % (str(u_name)) )
child.sendline("%s" % (str(passwd)))
child.interact()
#child.sendline("%s" % str(sub))
child.expect("[%s@qvislabs.com~]$"% (str(u_name)) )
#time.sleep()
#self.Destroy()
msg = wx.MessageBOx(" '%s'@host.com is connected" % (str(u_name)), "Info",wx_OK)
self.Hide()
if __name__=="__main__":
app = wx.App()
Connect_ssh().Show()
app.MainLoop()
由於SSH連接阻塞了主循環,因此GUI可能凍結了。 為了克服這個問題,您必須將連接代碼放入單獨的線程中。 然后使用wxPython的線程安全方法之一(wx.CallAfter,wx.CallLater或wx.PostEvent)告訴GUI顯示一個彈出對話框。
有關wxPython和線程的信息,請參見以下鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.