1
大家好我正在学习Python并使用wxPython制作GUI模型。连接到SSH后弹出消息框
我想连接到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([[email protected]~]$)
其接通后到这里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 %[email protected]" % (str(u_name)))
child.expect("%[email protected]'s password:" % (str(u_name)))
child.sendline("%s" % (str(passwd)))
child.interact()
#child.sendline("%s" % str(sub))
child.expect("[%[email protected]~]$"% (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()
哪里是哪里,你弹出消息框的代码? –
不在这..我只是想知道我们是否有任何方式来显示消息并克服从GUI冻结 – nammu
你不能只是问这个问题,并期待一个答案。这是你做错了什么。我们如何调试我们看不到的代码? –