2 回答
TA貢獻1798條經(jīng)驗 獲得超3個贊
您需要獲取 Entry 小部件的值。為此,請調用get()小部件上的方法。您可以在此處閱讀有關Tkinter Entry Widget的更多信息。
例子:
HOST = PING_ENTRY.get()
另外,我不確定您命令中的“30”應該做什么。如果您打算讓它 ping 30 次,則需要-n預先添加開關(在 Windows 上)或-c開關(在大多數(shù) Linux 發(fā)行版上)。例如,在 Windows 上:
command = "ping {} -n 30 -t".format(HOST)
TA貢獻1864條經(jīng)驗 獲得超2個贊
我添加這個只是為了以防萬一您希望異步執(zhí)行,您可以使用subprocess.Popen而不是subprocess.run.
UI 凍結,直到run執(zhí)行完成。如果您不希望這種情況發(fā)生,我建議您使用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答案:主要區(qū)別在于subprocess.run執(zhí)行命令并等待它完成,而subprocess.Popen你可以在進程完成時繼續(xù)做你的事情,然后重復調用 subprocess.communicate 自己來傳遞和接收數(shù)據(jù)到你的進程。
編輯:添加代碼使 ping 在 30 次試驗后停止。
要使您的代碼在特定數(shù)量的數(shù)據(jù)包后停止,請使用以下代碼。
視窗:
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。這就是為什么你無法阻止它。
添加回答
舉報
