我已经阅读了有关堆栈溢出的帖子,Issues intercepting subprocess output in real time,Redirect command line results to a tkinter GUI,我知道我必须在tkinter中使用线程和队列,但我仍然无法做到同样的事情因为我是节目的初学者,请帮助。
目标:按一下按钮,即可获得最高级别的'命令输出和tkinter文本小部件中的实时显示
问题:我已尝试按照代码进行操作,但仍无法获取输出,但我不知道如何使其正常工作。
from tkinter import *
import tkinter as tk
import subprocess
from threading import Thread
from queue import Queue
window = tk.Tk()
window.title('realtime')
window.geometry('800x400')
text = tk.Text(window)
text.pack()
button = tk.Button(window, text= 'Press')
button.pack()
window.mainloop()
这只是gui展望,请帮忙
答案 0 :(得分:0)
top
时不时地刷新自己,并且我猜测你想用线程和诸如此类的东西来捕捉你的行为。但是在这种情况下,要求top
只运行一次会更容易,并让tkinter进行计时和刷新:
import tkinter as tk
from sh import top
def update_text():
text.delete(0.0, tk.END)
text.insert(0.0, top('-b', n=1))
window.after(1000, update_text) # call this function again in 1 second
window = tk.Tk()
window.title('realtime')
window.geometry('800x400')
text = tk.Text(window)
text.pack()
button = tk.Button(window, text= 'Press', command=update_text)
button.pack()
window.mainloop()
您可能需要像我一样安装sh
以运行top,或者如果需要,可以使用subprocess.check_output
。
text.insert(0.0, subprocess.check_output(['top', '-b', '-n 1']))