2 回答

TA貢獻1798條經驗 獲得超3個贊
您需要獲取 Entry 小部件的值。為此,請調用get()
小部件上的方法。您可以在此處閱讀有關Tkinter Entry Widget的更多信息。
例子:
HOST = PING_ENTRY.get()
另外,我不確定您命令中的“30”應該做什么。如果您打算讓它 ping 30 次,則需要-n
預先添加開關(在 Windows 上)或-c
開關(在大多數 Linux 發行版上)。例如,在 Windows 上:
command = "ping {} -n 30 -t".format(HOST)

TA貢獻1864條經驗 獲得超2個贊
我添加這個只是為了以防萬一您希望異步執行,您可以使用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.communicate 自己來傳遞和接收數據到你的進程。
編輯:添加代碼使 ping 在 30 次試驗后停止。
要使您的代碼在特定數量的數據包后停止,請使用以下代碼。
視窗:
command = "ping -n 30 {}".format(HOST)
pro = subprocess.Popen(command, shell=True,stdout=subprocess.PIPE)
print(pro.communicate()[0]) # prints the stdout
Ubuntu:
command = "ping -c 30 {}".format(HOST)
pro = subprocess.Popen(command, shell=True,stdout=subprocess.PIPE)
print(pro.communicate()[0]) # prints the stdout
-t 基本上在 Windows 中無限期地 ping。這就是為什么你無法阻止它。
添加回答
舉報