Почему вы думаете, что это неэффективно? Вы испытали ? Кстати, он вообще не работает, потому что вы используете инструкцию from ... import
. Замена sys.stdout
прекрасна, но не делайте копию и не используйте временный файл. Вместо этого выберите нулевое устройство:
import sys
import os
def foo():
print "abc"
old_stdout = sys.stdout
sys.stdout = open(os.devnull, "w")
try:
foo()
finally:
sys.stdout.close()
sys.stdout = old_stdout