我正在努力将输出转换为另一个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的输出方面得到任何其他工作,因为我不知道代码。
脚本执行此操作的最小更改:
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中显示它的原因。