拦截python的`print`语句并在GUI中显示

Phi*_*Kay 3 python

我在Python中有这个有点复杂的命令行函数(让我们调用它myFunction()),我正在努力将它集成到图形界面中(使用PySide/Qt).

GUI用于帮助选择输入和显示输出.但是,它myFunction被设计为一个独立的命令行功能,它偶尔会打印出进度.

我的问题是:如何拦截这些print调用并在GUI中显示它们?我知道可以修改myFunction()发送processEvents()到GUI,但我会失去myFunction()在终端中执行的能力.

理想情况下,我想要类似于Ubuntu的图形软件更新程序,它有一个小的嵌入式终端外观小部件,显示apt-get它在终端中执行的显示内容.

Cor*_*erg 6

你可以重定向stdout并在之后恢复.例如:

import StringIO
import sys

# somewhere to store output
out = StringIO.StringIO()

# set stdout to our StringIO instance
sys.stdout = out

# print something (nothing will print)
print 'herp derp'

# restore stdout so we can really print (__stdout__ stores the original stdout)
sys.stdout = sys.__stdout__

# print the stored value from previous print
print out.getvalue()
Run Code Online (Sandbox Code Playgroud)