我创建了一个在命令行上打印结果的程序。 (它是服务器,它在命令行上打印日志。)
现在,我希望看到与GUI相同的结果。
如何将命令行结果重定向到GUI?
请提出一个方法,可以轻松地将控制台应用程序转换为简单的GUI。
请注意,它应该适用于Linux和Windows。
答案 0 :(得分:13)
您可以创建一个脚本包装程序,将命令行程序作为子进程运行,然后将输出添加到类似文本小部件的内容中。
from tkinter import *
import subprocess as sub
p = sub.Popen('./script',stdout=sub.PIPE,stderr=sub.PIPE)
output, errors = p.communicate()
root = Tk()
text = Text(root)
text.pack()
text.insert(END, output)
root.mainloop()
其中脚本是您的程序。显然,你可以用不同的颜色或类似的颜色打印错误。
答案 1 :(得分:4)
将stdout重定向到一个更新你的gui的write()方法是一种方法,可能是最快的 - 尽管运行一个子进程可能是一个更优雅的解决方案。
只有当你确信它能够起作用时才重定向stderr!
示例implimentation(gui文件和测试脚本):
test_gui.py:
from Tkinter import *
import sys
sys.path.append("/path/to/script/file/directory/")
class App(Frame):
def run_script(self):
sys.stdout = self
## sys.stderr = self
try:
del(sys.modules["test_script"])
except:
## Yeah, it's a real ugly solution...
pass
import test_script
test_script.HelloWorld()
sys.stdout = sys.__stdout__
## sys.stderr = __stderr__
def build_widgets(self):
self.text1 = Text(self)
self.text1.pack(side=TOP)
self.button = Button(self)
self.button["text"] = "Trigger script"
self.button["command"] = self.run_script
self.button.pack(side=TOP)
def write(self, txt):
self.text1.insert(INSERT, txt)
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.build_widgets()
root = Tk()
app = App(master = root)
app.mainloop()
test_script.py:
print "Hello world!"
def HelloWorld():
print "HelloWorldFromDef!"
答案 2 :(得分:3)
抱歉我的英语不好。实际上,我使用了一种不同的方式将命令提示输出打印到我的新自动化工具中。 请在下面找到这些步骤。
1>创建一个蝙蝠文件&将其输出重定向到LOG文件。
命令提示符命令:tasklist /svc
2 - ;使用Python 3.x读取该文件。 `processedFile = open(' D:\ LOG \ taskLog.txt',' r')
3>结局一步。
ttk.Label(Tab4, text=[ProcessFile.read()]).place(x=0, y=27)
**因此请注意,我尚未在此代码中包含滚动条。
发布截图: