亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

發個python2.6+wxPython+wxGlade實現的簡單teln

系統 1519 0


??? 這些日子在公司測試機頂盒游戲,每次啟動游戲的時候都要在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()

  

發個python2.6+wxPython+wxGlade實現的簡單telnet客戶端


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一区二区三区在线观看视频 | 狠狠色噜噜狠狠狠狠97老肥女 | 四虎影视最新 | 欧美性猛交xx乱大交 | 亚洲欧美精选 | 毛片基地免费视频a | 中文精品久久久久中文 | 99re9精品视频在线 | 99热精品免费 | 亚洲成在人线影视天堂网 | 国产精品边做奶水狂喷小说 | 777色狠狠一区二区三区 | 97成人资源 | 亚洲色视频在线播放网站 | 99热99色| 久久天天丁香婷婷中文字幕 | 亚洲精品亚洲人成在线播放 | 久久国产高清字幕中文 | 神马老子午夜 | 激情五月开心婷婷 | 久久99视频 | 综合久久91 | 欧美精品1区 | 婷婷在线观看视频 | 国内毛片视频 | 伊人国产精品 | 欧美精品成人一区二区在线观看 | 神马影院我不卡手机版 | www九色| 久久青草网站 | 欧美日韩一区二区视频免费看 | h片在线观看网站 | porno日本xxxxx视频 | 日韩一区二区视频在线观看 | 亚洲国产精品久久精品成人 | 蜜桃精品免费久久久久影院 | 欧美1区| 亚洲精品人成网线在线 | 精品国产一区二区三区久久影院 | 老王午夜69精品影院 | 在线播放国产福利视频 |