`
zyl小星星
  • 浏览: 2617 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

发个python2.6+wxPython+wxGlade实现的简单telnet客户端

阅读更多


    这些日子在公司测试机顶盒游戏,每次启动游戏的时候都要在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
分享到:
评论
6 楼 淡水鱼 2010-08-12  
我们我运行了你的源文件 成了这个样子,


python2.6+wxPython2.8.10 的环境   win7

5 楼 zyl小星星 2009-10-10  
ablmf 写道
至少登录的时候改成用线程来跑吧。

恩,的确需要加个线程,多谢提醒!
4 楼 zyl小星星 2009-10-10  
tti 写道
楼主的代码直接运行界面还不会出来呢?要改变一下窗体大小才出来。

呃,主要是我在布局的时候固定了组件的大小,布局管理器失效了,所以才会这样。删除组件大小设置的语句应该可以解决这个问题,或者重新用wxGlade设置下布局管理器。
3 楼 tti 2009-10-08  
楼主的代码直接运行界面还不会出来呢?要改变一下窗体大小才出来。
2 楼 mikeandmore 2009-10-01  
好像挺有爱的。。。。不过我用命令行的。。。
1 楼 ablmf 2009-09-30  
至少登录的时候改成用线程来跑吧。

相关推荐

    python3+wxpython图书馆管理系统

    python 3 +wxpython 图书馆管理系统,实现了图书的增删改查,借还书显示图书信息等内容,python 3 +wxpython 图书馆管理系统,实现了图书的增删改查,借还书显示图书信息等内容,python 3 +wxpython 图书馆管理系统,实现了...

    python + wxPython + SPE

    标题中的“python + wxPython + SPE”涉及到三个关键的IT技术元素:Python编程语言、wxPython库以及SPE(Scientific Programming Environment)。这些组件在创建桌面应用和科学计算环境中都有重要角色。 首先,...

    Python+wxpython邮件收发客户端

    用python+wxpython写的一个邮件收发客户端,原来一直用C++,最近一周学习了Python。这个小作品实现了邮件收发(能很好的解码pop3中文),账户管理(增加,删除,编辑,更换)。显示文件内容用了htmlwindow,对网页...

    python3 + wxpython 实现 AES 加密工具

    python3 + wxpython 实现 AES 加密工具 ,主要功能: 1. 选择自定义的密钥文件 2. 选择自定义的明文文件 3. 加密成密文并显示 4. 选择密文文件 5. 选择呢密钥文件 6. 进行解密并显示出明文

    Python2.5.4+wxPython2.8

    Python 2.5.4 和 wxPython 2.8 是两个重要的开源软件工具,它们在IT领域中扮演着重要角色,特别是在开发图形用户界面(GUI)应用方面。 Python 2.5.4 是 Python 语言的一个旧版本,发布于2007年,它提供了丰富的...

    python3+wxpython编程教程

    wxPython是一个开源的Python扩展库,基于wxWidgets C++库,它为Python提供了丰富的GUI组件,让开发者能够创建丰富的桌面应用程序。本教程将涵盖wxPython的安装、基本GUI元素、事件处理以及布局管理等方面的知识。 #...

    python3 + wxpython 实现RSA加密聊天室

    最近打算使用 python3 写一个图形化的聊天室,需要涉及到 RSA 加密模块,使用的是 python 自带的 RSA 加密模块。主要功能: 1. 作为聊天室服务器登录 2. 作为聊天室客户端登录 3. 客户端链接服务器IP 4. 客户端1...

    python2.7 + wxpython +zbar 实现二维码的生成、嵌入和提取

    最近打算用 python 写一个工具打算实现二维码的生成、嵌入和读取功能。系统采用 python2.7 和 zbar 运行,使用 wxpython 图形化模块涉及。主要功能: 1. 自定义二维码信息内容 2. 将信息生成二维码 3. 将二维码...

    python3 + wxpython 实现 RSA 安全传输工具

    最近打算使用 python3 写一个图形化的安全传输工具,加密算法是编程实现的,而不是调用 python 自带的函数库。 主要功能: 1. 作为服务器登录 2. 作为客户端登录 3. 服务器生成公私钥文件并将公钥发送给客户端 4....

    基于python+WxPython编程实现扫雷游戏源码.zip

    ython WxPython开源扫雷游戏PyMine新版1.5迁徙到Python 3.11和wxPython 4.2。并将所有图像放大一倍,以适合新的计算机的分辨率。并使用了没有边框的BitMapButton。 Python WxPython开源扫雷游戏PyMine新版1.4有少量...

    wxFormBuilder+wxPython+Python实现的简易计算器小项目代码

    wxFormBuilder画出图形界面,生成wxPython代码 Python实现后台计算逻辑 代码层次分享简单 适合初用wxFormBuilder做客户端程序的朋友参考

    Python+Wxpython+comtype+Ulipad安装集合

    WxPython是Python的一个GUI(图形用户界面)工具包,它允许开发者利用wxWidgets库创建跨平台的应用程序。在Windows系统中,wxPython为Python程序提供了原生的外观和感觉。 ComType是Python中用于与COM(组件对象...

    python-2.7+wxPython2.8-win64.rar

    标题中的"python-2.7+wxPython2.8-win64.rar"表明这是一个包含Python 2.7和wxPython 2.8的Windows 64位版本的压缩包。这个压缩包可能用于搭建一个基于Python的图形用户界面(GUI)开发环境。Python 2.7是一个广泛...

    Spy++python实现版

    在本项目"Spy++ python实现版"中,开发者利用wxPython来构建一个类似Spy++的功能,以Python语言重现在Windows环境下查看系统级信息的能力。 首先,我们要理解Python与wxPython的关系。Python是一种解释型、面向对象...

    python2.4 and wxPython

    wxPython 2.6 版本是针对Python 2.4设计的,包括了ansi字符集支持,适用于不使用Unicode的环境。这个版本包含了基本的控件、布局管理器、事件处理机制等,为创建复杂且用户友好的应用程序提供了便利。 【相关库】 1...

    wxGlade.7z

    Python的可视化编程工具wxglade是一个用python实现的wxwidgets的界面设计工具,使用wxPython搞开发时,感觉wxPython+wxGlade确实效率更高些,当然这受益于python语言的简洁易用。 wxGlade 启动以后默认产生三个窗口...

    python 2.6 模块(二)

    本主题将深入探讨Python 2.6版本中的两个关键模块:pywin32和wxPython,以及它们在Windows环境下的应用。 首先,pywin32是一个Python接口库,它提供了对Microsoft Windows API的访问。这个模块由Mark Hammond开发,...

    Python(2,3)+Opencv+wxPython界面,显示图像,鼠标交互画矩形截图

    1、实现的跨平台Python+wxPython界面,程序中添加了OpenCV代码进行简单的图像处理(截图),适合新手借鉴,利用wxPython库进行Python界面制作,如何在Python中调用OpenCV进行图像处理。 2、代码可以在Linux和Windows...

Global site tag (gtag.js) - Google Analytics