Python 捕获打印输出

Python 捕获打印输出,python,opencv,Python,Opencv,我使用的是opencv,需要使用VideoCapture读取视频帧,控制台上有print语句自动打印错误和信息,我希望捕获这些输出并保存到文件中 VideoCapture没有返回这些声明,只是直接打印 我该怎么做 我不知道这是否是最好的方法,但它会奏效的 通过键入以下内容,您可以读入程序打印到控制台中的所有内容: 在这里,我们将printtest打印到控制台中,就像opencv那样,使用p.stdout.readline可以再次读取它 import os import sys from subp

我使用的是opencv,需要使用VideoCapture读取视频帧,控制台上有print语句自动打印错误和信息,我希望捕获这些输出并保存到文件中

VideoCapture没有返回这些声明,只是直接打印


我该怎么做

我不知道这是否是最好的方法,但它会奏效的

通过键入以下内容,您可以读入程序打印到控制台中的所有内容:

在这里,我们将printtest打印到控制台中,就像opencv那样,使用p.stdout.readline可以再次读取它

import os
import sys
from subprocess import Popen, PIPE, STDOUT

script_path = os.path.join('name_of_your_program.py')

p = Popen([sys.executable, '-u', script_path],
          stdout=PIPE, stderr=STDOUT, bufsize=1)

while True:
    print("test-test-test-test")

    string = p.stdout.readline() 
    print(string[0:3])
输出:


它以二进制形式读取,因此您必须将其转换为字符串。

您可以使用./yourprogram 2>logfile将所有stderr重定向到一个文件。另一种方法是将sys.stderr连接到一个文件,比如sys.stderr=openlogfile'w',或者更好地使用with的上下文管理器。这个可能的副本看起来就像我需要的一样,请尝试一下,谢谢
test-test-test-test
b'tes'
test-test-test-test
b"b'T"
test-test-test-test
b'tes'