我做了两件事,现在我想加入这两件事。 我在Windows 8上使用命令提示符
我有一个可以从python运行的TCL文件。它在命令提示符下提供所有输出。我使用此命令来运行TCL
os.system(r'vivado -mode tcl -source location / my_tcl.tcl')
完整代码:
import Tkinter as tk
import os
import time
my_gui = tk.Tk()
mvar = tk.StringVar()
def my_hello():
chk = mvar.get()
if chk == '1':
os.system(r'vivado -mode tcl -source path/my_tcl.tcl')
f = open('input.txt', 'r')
a = f.readline().rstrip('\n')
if a == 'Passed':
mlabel = tk.Label(my_gui,text = 'Test Passed', fg = 'black', bg = 'green',width = 10).place(x=200,y=10)
else:
mlabel = tk.Label(my_gui,text = 'Test Failed', fg = 'black', bg = 'red',width = 10).place(x=200,y=10)
f.close
else:
mlabel = tk.Label(my_gui,text = 'No Test Run', fg = 'black', bg = 'yellow',width = 10).place(x=200,y=10)
my_gui.geometry('300x300+200+200')
my_gui.title('Test')
mbutton = tk.Button(my_gui,text = 'Run Tests!',command = my_hello).place(x=150,y=280,anchor= 'center')
check1 = tk.Checkbutton(my_gui,text = 'DDR Test',state = 'active', variable = mvar).place(x=10,y=10)
mvar.set('0')
my_gui.mainloop()
完整代码:https://gist.github.com/bitsgalore/901d0abe4b874b483df3ddc4168754aa
现在我想结合这两个部分,但是日志记录需要某种字符串输入才能存储和显示日志。而TCL的输出出现在命令提示符下。我想要实现的是命令提示符上显示的所有内容都可以在我的Tkinter文本小部件上看到。
有没有办法可以做到这一点? 此致
答案 0 :(得分:2)
这是一种有点静态的方法。
您可以使用subprocess
模块,该模块允许您捕获进程的输出,然后将其显示在tkinter.Text
小部件中。
import subprocess
def run_process():
path = "script_with_some_output"
p = subprocess.run(path, stdout=subprocess.PIPE)
return p.stdout
现在,您可以调用run_process()
来执行您的进程,并将其输出作为一个字节序列。
您可以通过调用Text
轻松将其记录到text.insert(tk.END, run_process())
窗口小部件中。
以下是一个简短的例子:
import tkinter as tk
import sys
import subprocess
def run_process():
path = r"path/to/script"
p = subprocess.run("python"+path, stdout=subprocess.PIPE)
return p.stdout
root = tk.Tk()
log = tk.Text(root)
b = tk.Button(root, text="Run stuff", command=lambda: log.insert(tk.END, run_process()))
log.pack()
b.pack()
root.mainloop()
此脚本将运行位于给定路径的脚本,并在文本小部件中显示其输出。