我正在努力将输出从另一个GUI转换为GUI。 我知道也有类似的帖子,但是在不知情的情况下,我无法解决问题。
我有一个使用os.system的脚本来从mdadm调用信息-有关我的RAID阵列的详细信息。我还为带有子流程的GUI提供了一个简单的小型脚本,因此该按钮将调用该脚本。但是我无法将其输出到另一个GUI窗口。
这是我的os.system脚本。
import os
os.system("sudo mdadm -D /dev/md0 | grep -A 3 State && grep -A 3 RaidDevice")
另一个脚本是我无法调整的简单GUI,以获得我想要的结果。
from tkinter import *
from tkinter import messagebox
top = Tk()
top.title('RAID Status')
top.geometry("250x160")
def raidStat():
import subprocess
subprocess.call(['./raidScripts/mdadmRaid.py'])
button1 = Button(top, text = "Check Status", command = raidStat)
button1.grid(row=1,column=0)
top.mainloop()
os.system脚本在终端中运行,并在文本编辑器中返回结果。
就GUI的输出而言,我什么也做不了,因为我不知道代码。
答案 0 :(得分:0)
您的脚本要做的最小更改:
from tkinter import *
from tkinter import messagebox
top = Tk()
top.title('RAID Status')
top.geometry("250x160")
def raidStat():
import subprocess
myproc = subprocess.run(['./raidScripts/mdadmRaid.py'], stdout=subprocess.PIPE)
messagebox.showinfo("Result", myproc.stdout)
button1 = Button(top, text = "Check Status", command = raidStat)
button1.grid(row=1,column=0)
top.mainloop()
请注意,我们现在将stdout
重定向到subprocess.PIPE
,并使用创建的流程对象的stdout
属性访问其内容。从Python 3.7开始,您可以仅用subprocess.run()
调用capture_output=True
而不是处理stdout
(和/或stderr
)。
与您的代码一样,脚本输出并未被Python完全触摸到。这就是为什么您可以在控制台上看到它,但是无法访问它以在GUI中显示它的原因。