我正在开发一个用于Linux内核重新编译的GUI。为此,我需要从Python实现4-5个Linux命令。我使用Qt作为GUI设计器。我已经使用os.system()
调用成功地实现了这些命令。但输出是在控制台获得的。真正的问题是命令的输出是一个列表,几乎需要20-25分钟的连续打印。我们如何将这个控制台输出转换到一个用Qt设计的文本框中。谁可以帮助我在Qt中实现setSource()
操作,使用源代码作为实时控制台输出。
发布于 2010-05-22 23:58:48
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-19 01:20:04
我主要和wxPython打交道,但是http://diotavelli.net/PyQtWiki/Capturing_Output_from_a_Process是一个可行的解决方案吗?
在该页面中:
Problem:您希望运行一个进程,该进程将大量信息打印到控制台,并在文本编辑器或浏览器中显示输出,但结果是图形用户界面冻结,直到该进程完成。
解决方案(许多可能的解决方案之一):创建一个QProcess对象,将其信号连接到类中的一些槽,传递给它所需的参数并启动它。进程的stdout和stderr上的数据将被传送到您的插槽。
continued...
发布于 2010-05-19 01:22:32
使用管道就会出现在脑海中。您可以使用一个后台线程来读取程序的输出(并在添加新行时将事件发送到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
https://stackoverflow.com/questions/2859256
复制相似问题