【问题标题】:Trying to make a telnet gui with telnetlib尝试使用 telnetlib 制作 telnet gui
【发布时间】:2017-03-13 13:54:14
【问题描述】:

首先,这是我在该网站上的第一个问题,所以我可能会犯一些基本错误,提前道歉。无论如何,我试图为 telnet 制作一个 GUI,并使用 python3 作为编程语言。但是我想建立一个连续的连接,遗憾的是我无法得到任何输出,直到我停止程序( tn.write(b"exit\n") )。我对各种反馈持开放态度(比如您应该使用套接字等等......)您提供的任何信息将不胜感激。 Ps:到目前为止我只尝试连接localhost,我只填写了连接按钮。 Ps2:不知怎的,我什至无法完全适应代码。

from tkinter import *
import tkinter.messagebox
import getpass
import sys
import telnetlib



def main():

    root= Tk()

    def tel_net():

        username = entry1.get()
        pw = entry2.get()
        host_ip= entry3.get()           

        HOST = host_ip
        user = username 
        password = pw

        tn = telnetlib.Telnet(HOST)

        tn.read_until(b"login: ")
        tn.write(user.encode('ascii') + b"\n")
        if password:
            tn.read_until(b"Password: ")
            tn.write(password.encode('ascii') + b"\n")

        tn.write(b"ls\n")
        tn.write(b"exit\n")
        print(tn.read_all().decode('ascii')

    def printconnect():

        print("connected")  
        tel_net()       

        tkinter.messagebox.showinfo("telnet", "connected")

    def printdisconnect():  
        print("disconnected")
        tn = telnetlib.Telnet(HOST)
        tn.close(HOST)      

        tkinter.messagebox.showinfo("telnet","disconnected")
    def quitwindow():
        answer = tkinter.messagebox.askquestion("telnet","Do you want to quit ?")
        if answer == "yes": 
            root.destroy()  

    button1 = Button(root, text="Connect", command=printconnect, fg="green")
    button2 = Button(root, text="Disconnect", command=printdisconnect, fg="red")
    button3 = Button(root, text="Exit", command=quitwindow, fg="purple")


    button1.grid(row=3, column=0, sticky = E)
    button2.grid(row=3, column=1, sticky = E)
    button3.grid(row=3, column=2, sticky = E)



    label1 = Label(root, text="Username")
    label2 = Label(root, text= "Password")
    label3 = Label(root, text="Host ip")



    entry1 = Entry(root)
    entry2 = Entry(root)
    entry3 = Entry(root)
    entry2.config(show="*");

    label1.grid(row=0, column=0, sticky = W)
    label2.grid(row=1, column=0, sticky = W)
    label3.grid(row=2, column=0, sticky = W)

    entry1.grid(row=0, column=1, sticky = W)
    entry2.grid(row=1, column=1, sticky = W)
    entry3.grid(row=2, column=1, sticky = W)

    c1=Checkbutton(root, text="Remember username")
    c1.grid(columnspan=2,sticky = W)
    c2=Checkbutton(root, text="Remember password")
    c2.grid(columnspan=2,sticky = W)
    root.mainloop()
if __name__ == "__main__":
    main()

【问题讨论】:

    标签: python user-interface telnet telnetlib


    【解决方案1】:

    由于 telnet 通信被阻塞,您需要将实际通信置于 GUI 之外的单独线程中。您还需要对所有读取操作设置超时,然后检查在读取之间是否有任何写入操作要执行。

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 1970-01-01
      • 2015-05-13
      • 2012-09-07
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      相关资源
      最近更新 更多