2012-04-25 72 views
1

我此行我的代码停止功能从编写到stdout

Output #0, avi, to 'video.avi': 
Stream #0:0: Video: mpeg4, yuv420p, 480x800, q=2-31, 24576 kb/s, 90k tbn, 30 tbc 

我想从打印任何东西到标准输出停止,但保留在代码中进一步输出的可能性。我怎样才能做到这一点?

我试过了,但没有奏效。

class NullStream: 
    def write(self, text): 
     pass 

sys.stdout = NullStream() 
sys.stderr = NullStream() 

print "hello" #This doesn't outputs 

#This function still outputs to console: 
writer = cv.CreateVideoWriter('video.avi', cv.CV_FOURCC('X','V','I','D'), 30 ,(480,800), 1) 

sys.stdout = sys.__stdout__ 
sys.stderr = sys.__stderr__ 

回答

3

这不是OpenCV的输出这个信息。它是FFMPEG(由OpenCV调用)。

您可以重新编译FFMPEG以禁用这些调试。

+0

有没有一种方法来设置ffmpeg的冗长而不需要重新编译它? – lexmiir 2012-04-25 18:55:31

+0

只有在您使用cmd-line工具时:'ffmpeg -loglevel 0',这不是OpenCV在窗帘后面做的事情。简短的回答:我不知道除了重新编译以外的其他方法。 – karlphillip 2012-04-25 18:58:25

2
import os 
import sys 
saved_stdout, saved_stderr = sys.stdout, sys.stderr 
sys.stdout = sys.stderr = open(os.devnull, "w") 
writer = cv.CreateVideoWriter('video.avi', cv.CV_FOURCC('X','V','I','D'), 30 ,(480,800), 1) 
sys.stdout, sys.stderr = saved_stdout, saved_stderr 
print 'Now this will print to stdout' 

演示:

>>> import os 
>>> import sys 
>>> saved_stdout, saved_stderr = sys.stdout, sys.stderr 
>>> sys.stdout = sys.stderr = open(os.devnull, "w") 
>>> print 'hello world'      # no output 
>>> sys.stderr.write('Invisible Error!\n') # no ouput 
>>> sys.stdout, sys.stderr = saved_stdout, saved_stderr 
>>> print 'goodbye world'     
goodbye world 
>>> sys.stderr.write('Error!\n') 
Error! 
+0

经过测试,它仍然输出相同的东西。 – lexmiir 2012-04-25 18:42:56

+0

顺便说一句,有没有使用saved_stdout = sys.stdout,而不是sys .__ stdout__?的优势? – lexmiir 2012-04-25 18:44:44

+0

请参阅演示编辑。似乎为我工作。我已经使用了这种方法。我不知道“sys .__ stdout__”问题的答案。 – alan 2012-04-25 18:47:37