我无法使这条线与Tk一起使用
import os
while(1):
ping = os.popen('ping www.google.com -n 1')
result = ping.readlines()
msLine = result[-1].strip()
print msLine.split(' = ')[-1]
我正在尝试创建一个标签和text = msLine.split ...但是所有内容都会冻结
答案 0 :(得分:0)
Tk和popen()可能存在其他问题。第一:
您不能继续ping或从google.com上获取。
在顶部添加“导入时间”,在底部添加“time.sleep(2)” while循环。
第二
您可能需要“ping www.google.com -c 1”而不是“-n 1”。 “-c 1”要求一个 ping只。 “-n 1”ping 0.0.0.1。
答案 1 :(得分:0)
您的示例代码不显示GUI代码。在没有看到代码的情况下,无法猜测为什么GUI会冻结。虽然,你的代码非常错误,所以即使你的帖子中有GUI代码,它也可能无济于事。
您是否可能忘记在根窗口小部件上调用mainloop()方法?这可以解释冻结。如果你正在调用mainloop(),那么没有理由做while(1),因为主事件循环本身是一个无限循环。你为什么要在循环中调用ping?
您遇到的一个具体问题是您正在调用ping错误。例如,选项“-n 1”需要在主机名参数之前(即:'ping -n 1 www.google.com'而不是'ping www.google.com -n 1')。另外,-n是错误的做法。我想你想要“-c 1”
以下是如何定期ping和更新标签的工作示例:
import os
from Tkinter import *
class App:
def __init__(self):
self.root = Tk()
self.create_ui()
self.url = "www.google.com"
self.do_ping = False
self.root.mainloop()
def create_ui(self):
self.label = Label(self.root, width=32, text="Ping!")
self.button = Button(text="Start", width=5, command=self.toggle)
self.button.pack(side="top")
self.label.pack(side="top", fill="both", expand=True)
def toggle(self):
if self.do_ping:
self.do_ping = False
self.button.configure(text="Start")
else:
self.do_ping = True
self.button.configure(text="Stop")
self.ping()
def ping(self):
if not self.do_ping:
return
ping = os.popen('ping -c 1 %s' % self.url)
result = ping.readlines()
msLine = result[-1].strip()
data = msLine.split(' = ')[-1]
self.label.configure(text=data)
# re-schedule to run in another half-second
if self.do_ping:
self.root.after(500, self.ping)
app=App()