提问者:小点点

为什么在运行python ping脚本时会出现主机未发现错误?


我在一段时间前制作了这个脚本,如果我没有记错的话,它是可以工作的,但是现在我得到了一个无法找到主机的错误。 感谢任何帮助。

from tkinter import *
from tkinter import ttk
import socket
import sqlite3
import subprocess




BASE = Tk()
BASE.geometry("400x400")




def PING_CLIENT():
    
    HOST = PING_ENTRY

    command = "ping {} 30 -t".format(HOST)
    subprocess.run(command)
    
    


PING = ttk.Button(BASE, text="Ping IP", command=PING_CLIENT)
                  
PING.place(x=35, y=100, height=30, width=150)

PING_ENTRY = ttk.Entry(BASE)
PING_ENTRY.place(x=200, y=100, height=30, width=150)


BASE.mainloop()

共2个答案

匿名用户

您需要获取Entry小部件的值。 为此,调用小部件上的get()方法。 您可以在这里阅读有关Tkinter条目小部件的更多信息。

示例:

主机=ping_entry.get()

另外,我也不太清楚你指挥的“30”是要做什么的。 如果希望它ping 30次,则需要事先添加-n开关:

命令=“ping{}-n 30-t”。format(HOST)

匿名用户

@AndroidNoobie的回答很管用。 我添加这个是为了防止您希望异步执行,您可以使用subprocess.popen而不是subprocess.run

UI将冻结,直到run执行完成。 如果您不希望发生这种情况,我建议您使用subprocess.popen

def PING_CLIENT():

    HOST = PING_ENTRY.get()

    command = "ping {} -n 30 -t".format(HOST)
    #subprocess.run(command, shell=True)
    subprocess.Popen(command, shell=True)

从另一个SO答案来看:主要区别在于subprocess.run执行命令并等待它完成,而使用subprocess.popen,您可以在进程完成时继续执行您的操作,然后重复调用subprocess.communication,以便向进程传递和接收数据。