Как вывести скрипт подпроцесса в графический интерфейс? - PullRequest
2 голосов
/ 25 марта 2019

Я борюсь с преобразованием вывода в GUI из другого GUI.Я знаю, что есть похожие посты, но без ведома я не могу сделать из них головы или хвосты к своей проблеме.

У меня есть скрипт, использующий os.system для вызова информации из mdadm - детали о моем RAIDмассив.У меня также есть небольшой упрощенный скрипт для графического интерфейса с подпроцессом, поэтому кнопка будет вызывать скрипт.Но я не могу заставить его выводить код в другое окно графического интерфейса.

Это мой скрипт для os.system.

import os
os.system("sudo mdadm -D /dev/md0 | grep -A 3 State && grep -A 3 RaidDevice")

Другой скрипт - мой простой графический интерфейс, который я не могунастройте, чтобы получить желаемые результаты.

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 работает в терминале и возвращает результаты в текстовом редакторе.

Я не могу заставить что-либо еще работать в терминахвывода для графического интерфейса, потому что я не знаю код.

1 Ответ

0 голосов
/ 25 марта 2019

Минимальное изменение для вашего сценария:

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.Вот почему вы могли видеть его на консоли, но не могли получить к нему доступ, чтобы отобразить его в графическом интерфейсе.

...