4

我正在开发一个用于重新编译 Linux 内核的 GUI。为此,我需要从 Python 实现 4-5 个 Linux 命令。我使用 Qt 作为 GUI 设计器。我已经使用os.system()call 成功实现了命令。但是输出是在控制台获得的。真正的问题是 command 的输出是一个几乎需要 20-25 分钟连续打印的列表。我们如何将此控制台输出传输到用 Qt 设计的文本框。任何人都可以帮助我setSource()使用源代码作为实时控制台输出来实现 Qt 中的操作。

4

3 回答 3

7
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()))

这对我来说做得很好。谢谢你们。

于 2010-05-22T15:58:48.287 回答
1

我主要处理 wxPython,但http://diotavelli.net/PyQtWiki/Capturing_Output_from_a_Process是一个可行的解决方案吗?

从页面:

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

解决方案(多种可能之一): 创建一个 QProcess 对象,将其信号连接到类中的某些插槽,将所需的参数传递给它并启动它。进程的 stdout 和 stderr 上的数据将传送到您的插槽。

继续...

于 2010-05-18T17:20:04.307 回答
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
于 2010-05-18T17:22:32.227 回答