这些日子在公司测试机顶盒游戏,每次启动游戏的时候都要在windows黑色的dos窗口输命令,非常不方便,于是借着自己刚学的一点点python+wxPython的知识,写了这个telnet客户端,功能比较简单,根据需要可以再作修改。界面用wxGlade生成,本来我不喜欢wxGlade的,觉得不是很好用,但用着用着发现其实还不错,生成的代码也很容易和自己的代码结合。
输入指令的输入框有默认的指令提示,为了方便写了个COMMAND指令列表,这是公司里用的,可以在源代码中COMMADN列表中修改自己需要的指令,或者去掉COMMAND,直接往输入框输指令。
#!/usr/bin/env python
# -*- coding: GB2312 -*-
# @author 小星星 zyl198692@sina.com
# generated by wxGlade 0.6.3 on Mon Aug 17 13:50:13 2009
import wx
import telnetlib
import sys
# begin wxGlade: extracode
# end wxGlade
# 预先定义的指令列表
COMMAND=['busybox mount -t nfs -o nolock,ro,mountvers=2 192.168.1.128:/iptv /mnt','cd mnt/czy/llz/soundddz','sh run.sh']
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
# 初始化组件,由wxGlade产生
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.panel_1 = wx.Panel(self, -1)
self.sizer_3_staticbox = wx.StaticBox(self.panel_1, -1, u"远程登录")
self.label_2 = wx.StaticText(self.panel_1, -1, u"地址:")
self.ip_ctrl = wx.TextCtrl(self.panel_1, -1, "192.168.18.11")
self.label_3 = wx.StaticText(self.panel_1, -1, u"端口:")
self.port_ctrl = wx.TextCtrl(self.panel_1, -1, "23")
self.label_4 = wx.StaticText(self.panel_1, -1, u"用户:")
self.user_ctrl = wx.TextCtrl(self.panel_1, -1, "root")
self.label_5 = wx.StaticText(self.panel_1, -1, u"密码:")
self.pwd_ctrl = wx.TextCtrl(self.panel_1, -1, "6e58f908")
self.label_6 = wx.StaticText(self.panel_1, -1, u"连接信息")
self.info_ctrl = wx.TextCtrl(self.panel_1, -1, "", style=wx.TE_MULTILINE)
self.label_7 = wx.StaticText(self.panel_1, -1, u"发送指令")
self.cmd_ctrl = wx.TextCtrl(self.panel_1, -1, "", style=wx.TE_MULTILINE)
self.send_btn = wx.Button(self.panel_1, -1, u"发送指令")
self.static_line_1 = wx.StaticLine(self.panel_1, -1)
self.logout_btn = wx.Button(self.panel_1, -1, u"退出登录")
self.login_btn = wx.Button(self.panel_1, -1, u"远程登录")
self.clear_btn = wx.Button(self.panel_1, -1, u"清空信息")
self.exit_btn = wx.Button(self.panel_1, -1, u"退出程序")
# 组件添加属性值,由wxGlade产生
self.__set_properties()
self.__do_layout()
# 按钮事件绑定,由wxGlade产生
self.Bind(wx.EVT_BUTTON, self.OnSend, self.send_btn)
self.Bind(wx.EVT_BUTTON, self.OnLogout, self.logout_btn)
self.Bind(wx.EVT_BUTTON, self.OnLogin, self.login_btn)
self.Bind(wx.EVT_BUTTON, self.OnExit, self.exit_btn)
self.Bind(wx.EVT_BUTTON, self.OnClear, self.clear_btn)
# telnet连接标志
self.isconnected=False
# end wxGlade
# 连接远程计算机
def connect(self):
# 计数器
self.temp=0
# telnet登陆必须参数,端口默认23,这里就没再设置
self.HOST=str(self.ip_ctrl.GetValue())
self.USER=str(self.user_ctrl.GetValue())
self.PASS=str(self.pwd_ctrl.GetValue())
self.cmd_ctrl.SetValue(COMMAND[self.temp])
# 实例化一个telnet对象
self.tn=telnetlib.Telnet()
try:
# 连接,出现异常则宣告连接失败
self.tn.open(self.HOST)
self.info_ctrl.AppendText("已连上远程计算机,等待登录...\n")
return True
except:
self.info_ctrl.AppendText("对不起,远程计算机连接失败!\n")
return False
def login(self):
# 从远程计算机获取登录提示信息,需要输入用户名(包含"login"字符串)
user_info=self.tn.expect(['login:'],5)
self.info_ctrl.AppendText("反馈:"+user_info[2]+"\n")
# 发送用户名
self.tn.write(self.USER+'\n')
self.info_ctrl.AppendText("登录用户:"+self.USER+"\n")
# 从远程计算机获取登录提示信息,需要输入密码(包含"Password"字符串)
pwd_info=self.tn.expect(['Password:'],5)
self.info_ctrl.AppendText("反馈:"+pwd_info[2]+"\n")
# 发送密码
self.tn.write(self.PASS+'\n')
self.info_ctrl.AppendText("登录密码:"+self.PASS+"\n")
# 如果登陆成功,会回显用户名,这里根据是否回显用户名判断登陆是否成功
result=self.tn.expect([self.USER],5)
self.info_ctrl.AppendText("反馈:"+result[2]+"\n")
if result[0]==-1:
self.info_ctrl.AppendText("登录失败,请确认用户名和密码!\n")
return False
else:
self.info_ctrl.AppendText("恭喜你!登陆成功!\n")
self.info_ctrl.AppendText("等待输入指令......\n")
#为了减少用户错误操作,这里加了些手段
self.logout_btn.Enable(True)
self.login_btn.Enable(False)
self.send_btn.Enable(True)
self.isconnected=True
return True
# 发送telnet指令
def sendCommand(self,cmd):
self.send_btn.Enable(False)
self.info_ctrl.AppendText("指令:"+cmd+"\n")
self.tn.write(cmd+'\n')
reply=self.tn.expect(['%'],5)
self.info_ctrl.AppendText("反馈:"+reply[2]+"\n")
self.info_ctrl.AppendText("等待输入指令......\n")
self.send_btn.Enable(True)
# 退出telnet登陆
def logout(self):
self.tn.close()
self.info_ctrl.AppendText("成功退出登录!\n")
del self.tn
self.send_btn.Enable(False)
self.logout_btn.Enable(False)
self.login_btn.Enable(True)
self.isconnected=False
# 组件属性赋值,由wxGlade产生
def __set_properties(self):
# begin wxGlade: MyFrame.__set_properties
self.SetTitle("小星星远程登录工具")
self.SetSize((618, 463))
self.info_ctrl.SetMinSize((600, 180))
self.cmd_ctrl.SetMinSize((600, 50))
self.send_btn.Enable(False)
self.logout_btn.Enable(False)
# end wxGlade
# 界面布局,由wxGlade产生(wxGlade的确是个好东西!)
def __do_layout(self):
# begin wxGlade: MyFrame.__do_layout
sizer_2 = wx.BoxSizer(wx.VERTICAL)
sizer_3 = wx.StaticBoxSizer(self.sizer_3_staticbox, wx.VERTICAL)
grid_sizer_4 = wx.GridSizer(1, 4, 0, 0)
grid_sizer_3 = wx.GridSizer(1, 1, 0, 0)
sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
sizer_8 = wx.BoxSizer(wx.HORIZONTAL)
sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
sizer_5.Add(self.label_2, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_5.Add(self.ip_ctrl, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_4.Add(sizer_5, 1, wx.EXPAND, 0)
sizer_6.Add(self.label_3, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_6.Add(self.port_ctrl, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_4.Add(sizer_6, 1, wx.EXPAND, 0)
sizer_7.Add(self.label_4, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_7.Add(self.user_ctrl, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_4.Add(sizer_7, 1, wx.EXPAND, 0)
sizer_8.Add(self.label_5, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_8.Add(self.pwd_ctrl, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_4.Add(sizer_8, 1, wx.EXPAND, 0)
sizer_3.Add(sizer_4, 1, wx.EXPAND, 0)
sizer_3.Add(self.label_6, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_3.Add(self.info_ctrl, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_3.Add(self.label_7, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_3.Add(self.cmd_ctrl, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_3.Add(self.send_btn, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_3.Add(grid_sizer_3, 1, wx.EXPAND, 0)
sizer_3.Add(self.static_line_1, 0, wx.EXPAND, 0)
grid_sizer_4.Add(self.exit_btn, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_4.Add(self.clear_btn, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_4.Add(self.logout_btn, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_4.Add(self.login_btn, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
sizer_3.Add(grid_sizer_4, 1, wx.EXPAND, 0)
self.panel_1.SetSizer(sizer_3)
sizer_2.Add(self.panel_1, 1, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
self.SetSizer(sizer_2)
self.Layout()
# end wxGlade
# 响应"发送指令"按钮动作,执行发送操作
def OnSend(self, event): # wxGlade: MyFrame.<event_handler>
self.sendCommand(str(self.cmd_ctrl.GetValue()))
self.temp=self.temp+1
if self.temp>=len(COMMAND):
self.cmd_ctrl.SetValue("")
else:
self.cmd_ctrl.SetValue(COMMAND[self.temp])
# 响应"退出登录"按钮动作,执行退出登录操作
def OnLogout(self, event): # wxGlade: MyFrame.<event_handler>
self.logout()
# 响应"远程登录"按钮动作,执行登录操作
def OnLogin(self, event): # wxGlade: MyFrame.<event_handler>
self.connect()
self.login()
self.temp=0
# 响应"退出程序"按钮动作,执行退出程序操作
def OnExit(self,event):
# 当然,如果登陆的时候强制退出,为了安全,弹出提示
if self.isconnected:
dlg=wx.MessageDialog(parent=None,message="如果现在退出,将会丢失远程登录连接,是否确认退出?",caption="警告",style=wx.OK|wx.CANCEL)
if dlg.ShowModal()==wx.ID_OK:
self.logout()
self.Close()
sys.exit()
else:
self.Close()
sys.exit()
# 响应"清空信息"按钮动作,执行清空消息内容
def OnClear(self,event):
self.info_ctrl.SetValue("")
# end of class MyFrame
# 主程序入口,这个也是wxGlade产生的
if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 =MyFrame(None, -1, "")
app.SetTopWindow(frame_1)
frame_1.Show()
app.MainLoop()
- 大小: 36.4 KB
分享到:
- 2009-08-17 20:48
- 浏览 2617
- 评论(6)
- 论坛回复 / 浏览 (6 / 12939)
- 查看更多
相关推荐
python 3 +wxpython 图书馆管理系统,实现了图书的增删改查,借还书显示图书信息等内容,python 3 +wxpython 图书馆管理系统,实现了图书的增删改查,借还书显示图书信息等内容,python 3 +wxpython 图书馆管理系统,实现了...
标题中的“python + wxPython + SPE”涉及到三个关键的IT技术元素:Python编程语言、wxPython库以及SPE(Scientific Programming Environment)。这些组件在创建桌面应用和科学计算环境中都有重要角色。 首先,...
用python+wxpython写的一个邮件收发客户端,原来一直用C++,最近一周学习了Python。这个小作品实现了邮件收发(能很好的解码pop3中文),账户管理(增加,删除,编辑,更换)。显示文件内容用了htmlwindow,对网页...
python3 + wxpython 实现 AES 加密工具 ,主要功能: 1. 选择自定义的密钥文件 2. 选择自定义的明文文件 3. 加密成密文并显示 4. 选择密文文件 5. 选择呢密钥文件 6. 进行解密并显示出明文
Python 2.5.4 和 wxPython 2.8 是两个重要的开源软件工具,它们在IT领域中扮演着重要角色,特别是在开发图形用户界面(GUI)应用方面。 Python 2.5.4 是 Python 语言的一个旧版本,发布于2007年,它提供了丰富的...
wxPython是一个开源的Python扩展库,基于wxWidgets C++库,它为Python提供了丰富的GUI组件,让开发者能够创建丰富的桌面应用程序。本教程将涵盖wxPython的安装、基本GUI元素、事件处理以及布局管理等方面的知识。 #...
最近打算使用 python3 写一个图形化的聊天室,需要涉及到 RSA 加密模块,使用的是 python 自带的 RSA 加密模块。主要功能: 1. 作为聊天室服务器登录 2. 作为聊天室客户端登录 3. 客户端链接服务器IP 4. 客户端1...
最近打算用 python 写一个工具打算实现二维码的生成、嵌入和读取功能。系统采用 python2.7 和 zbar 运行,使用 wxpython 图形化模块涉及。主要功能: 1. 自定义二维码信息内容 2. 将信息生成二维码 3. 将二维码...
最近打算使用 python3 写一个图形化的安全传输工具,加密算法是编程实现的,而不是调用 python 自带的函数库。 主要功能: 1. 作为服务器登录 2. 作为客户端登录 3. 服务器生成公私钥文件并将公钥发送给客户端 4....
ython WxPython开源扫雷游戏PyMine新版1.5迁徙到Python 3.11和wxPython 4.2。并将所有图像放大一倍,以适合新的计算机的分辨率。并使用了没有边框的BitMapButton。 Python WxPython开源扫雷游戏PyMine新版1.4有少量...
wxFormBuilder画出图形界面,生成wxPython代码 Python实现后台计算逻辑 代码层次分享简单 适合初用wxFormBuilder做客户端程序的朋友参考
WxPython是Python的一个GUI(图形用户界面)工具包,它允许开发者利用wxWidgets库创建跨平台的应用程序。在Windows系统中,wxPython为Python程序提供了原生的外观和感觉。 ComType是Python中用于与COM(组件对象...
标题中的"python-2.7+wxPython2.8-win64.rar"表明这是一个包含Python 2.7和wxPython 2.8的Windows 64位版本的压缩包。这个压缩包可能用于搭建一个基于Python的图形用户界面(GUI)开发环境。Python 2.7是一个广泛...
在本项目"Spy++ python实现版"中,开发者利用wxPython来构建一个类似Spy++的功能,以Python语言重现在Windows环境下查看系统级信息的能力。 首先,我们要理解Python与wxPython的关系。Python是一种解释型、面向对象...
wxPython 2.6 版本是针对Python 2.4设计的,包括了ansi字符集支持,适用于不使用Unicode的环境。这个版本包含了基本的控件、布局管理器、事件处理机制等,为创建复杂且用户友好的应用程序提供了便利。 【相关库】 1...
Python的可视化编程工具wxglade是一个用python实现的wxwidgets的界面设计工具,使用wxPython搞开发时,感觉wxPython+wxGlade确实效率更高些,当然这受益于python语言的简洁易用。 wxGlade 启动以后默认产生三个窗口...
本主题将深入探讨Python 2.6版本中的两个关键模块:pywin32和wxPython,以及它们在Windows环境下的应用。 首先,pywin32是一个Python接口库,它提供了对Microsoft Windows API的访问。这个模块由Mark Hammond开发,...
1、实现的跨平台Python+wxPython界面,程序中添加了OpenCV代码进行简单的图像处理(截图),适合新手借鉴,利用wxPython库进行Python界面制作,如何在Python中调用OpenCV进行图像处理。 2、代码可以在Linux和Windows...