在 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')
我想在 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')