如何将子进程脚本输出到GUI?

问题描述 投票:2回答:1

我正在努力将输出转换为另一个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的输出方面得到任何其他工作,因为我不知道代码。

python user-interface tkinter subprocess output
1个回答
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中显示它的原因。

© www.soinside.com 2019 - 2024. All rights reserved.