在 python 中获取当前控制台输出

Get current console output in python

我想在 python 中获取程序的当前控制台输出。当 运行 一个外部程序时,有很多解决方案可以获取控制台输出,但是,我找不到任何解决方案来获取当前程序的控制台输出。我错过了什么吗?我正在寻找在 windows 和 linux.

下工作的解决方案

例如:

print "Hello world"
output = get_console_output() # Returns "Hello World\n"

编辑: 该解决方案应保留控制台输出,因此仅替换 stdout 是行不通的,因为那时控制台将为空

您可以用任何类似文件的对象覆盖 sys.stdout:

import sys
import StringIO
sys.stdout = StringIO.StringIO()

您还应该考虑使用日志记录模块而不是打印。或者简单地写一个存储和打印值的函数。

如果您想访问输出,您需要将标准输出stdout 重定向到某处。例如,您可以使用 StringIO

from cStringIO import StringIO
import sys

sys.stdout = buffer = StringIO()

print "Hello World"

# get output via: buffer.getvalue()

如果您希望输出到一个文件,您可以直接重定向到一个文件:

import sys
sys.stdout = open('output.txt', 'w')
print 'Hello World'

编辑:如果你想将输出附加到日志中(根据评论),我建议自定义 class:

import sys

class Log(object):
    def __init__(self):
        self.orgstdout = sys.stdout
        self.log = open("log.txt", "a")

    def write(self, msg):
        self.orgstdout.write(msg)
        self.log.write(msg)  

sys.stdout = Log()
print('Hello World')