2012-04-25 69 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