如何将Python控制台输出重定向到QTextBox
我正在开发一个图形界面(GUI),目的是为了重新编译Linux内核。为此,我需要在Python中实现4到5个Linux命令。我使用Qt来设计这个图形界面。我已经成功地通过os.system()
来执行这些命令,但输出结果是在控制台上显示的。真正的问题是,这些命令的输出是一个长长的列表,打印出来几乎需要20到25分钟。我们该如何把这个控制台的输出转移到Qt设计的文本框里呢?有没有人能帮我在Qt中实现setSource()
操作,让它的源是实时的控制台输出?
3 个回答
0
可以考虑使用管道。你可以用一个后台线程来读取程序的输出,并在每次添加新行时向图形界面发送事件。
所以基本的想法是这样的:
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
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()))
这个方法对我来说效果很好。谢谢大家。