2010-05-18 3 views
3

Я работаю над созданием графического интерфейса для перекомпиляции ядра Linux. Для этого мне нужно реализовать 4-5 команд Linux из Python. Я использую Qt как GUI-дизайнер. Я успешно выполнил команды с помощью вызова os.system(). Но выход получается на консоли. Реальная проблема - вывод команды - это список, который требует непрерывной печати продолжительностью 20-25 минут. Как мы можем передать этот вывод консоли в текстовое поле, разработанное в Qt. Может ли кто-нибудь помочь мне реализовать операцию setSource() в Qt, используя источник в качестве выходов в режиме реального времени.Как перенаправить вывод консоли Python в QTextBox

ответ

5
self.process = QProcess() 
self.connect(self.process, SIGNAL("readyReadStdout()"), self.readOutput) 
self.connect(self.process, SIGNAL("readyReadStderr()"), self.readErrors) 
tarsourcepath="sudo tar xvpf "+ self.path1 
self.process.setArguments(QStringList.split(" ",tarsourcepath)) 
self.process.start() 



def readOutput(self): 

    self.textBrowser2.append(QString(self.process.readStdout())) 
    if self.process.isRunning()==False: 
     self.textBrowser2.append("\n Completed Successfully") 




def readErrors(self): 
    self.textBrowser2.append("error: " + QString(self.process.readLineStderr())) 

Это сделал работу достаточно хорошо для меня. Спасибо вам всем.

1

В основном я имею дело с wxPython, но есть http://diotavelli.net/PyQtWiki/Capturing_Output_from_a_Process решение, которое сработает?

На странице:

Проблема: Вы хотите запустить процесс , который печатает много информации на консоль и вывода изображения в текстовом редакторе или браузере, но результат является графическим интерфейсом, который зависает до завершения процесса .

Solution (один из многих возможных): Создать объект QProcess, подключите его сигналы некоторых слотов в классе, передать ему необходимые аргументы и запустить его. Данные по этапу процесса и stderr доставлены в ваши слоты.

continued...

+0

Отличная помощь Bro, у нее действительно есть что-то для me.but, но я имею в виду только windows. Мне нужно сделать системные вызовы, используя it.ie, о выполнении некоторых программ с аргументами req. Но это была отличная помощь bro как i может получить возможность реализовать интерфейс приложения. Спасибо – Kris

+0

снова попробовал и получил его успешно сделано bro. Я использовал start() notead of closeStdin(), он работал нормально.thanks – Kris

0

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

Так основная идея заключается в следующем:

os.chdir("/usr/src/linux-2.6.34") 

p = os.popen("make", "r") 
try: 
    while True: 
     line = p.readline() 
     if not line: 
      break 

     # Replace this with a GUI update event (don't know anything about Qt, sorry) 
     print line 
finally: 
    # Cf. http://docs.python.org/library/os.html#os.popen 
    programReturnValue = p.close() or 0 
+0

Идея хорошая, но проблема в том, что точка dot kno, если поток способен передать то, что вышло до сих пор. потому что я не думаю, что у нас есть временное различие для обновления. Но я мог найти ответ сверху ответа NIck. Спасибо, что помогли мне andiDog. – Kris

Смежные вопросы