2010-05-18 162 views
3

我正在开发用于重新编译Linux内核的GUI。为此,我需要从Python实现4-5个Linux命令。我使用Qt作为GUI设计器。我已使用os.system()调用成功实施了这些命令。但输出是在控制台上获得的。真正的问题是命令的输出是一个需要几乎20-25分钟连续打印的清单。我们如何将这个控制台输出转移到Qt中设计的文本框中。任何人都可以帮助我在Qt中使用源代码实现setSource()操作作为实时控制台输出。如何将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的解决方案,将工作?

从页面:

问题:你想运行一个进程 ,打印大量的信息到 控制台,并显示在 文本编辑器或浏览器的输出,但结果 是一个GUI,冻结,直到 过程完成。

解决方案(许多可能的一个): 创建一个QProcess中的对象,其 信号连接到一些插槽类, 传所需要的参数和 启动它。过程的标准输出 和stderr上的数据将传送到您的插槽。

continued...

+0

伟大的帮助兄弟,它真的有我的东西。但我得到的只是关于Windows的窗口。我需要使用它进行系统调用。它关于执行一些程序与req arguments.but它是伟大的帮助兄弟,因为我可以获得实现应用程序界面的方式。谢谢 – Kris 2010-05-19 06:19:38

+0

再次尝试并成功完成了兄弟。我用start()取代closeStdin()它顺利地工作。谢谢 – Kris 2010-05-19 07:20:00

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

这个想法是好的,但是问题是我知道如果线程能够传输什么到现在。因为我不认为我们有更新的时间差异。但我可以从NIck的上面找到答案。感谢您帮助我和iDog。 – Kris 2010-05-19 07:22:21

相关问题