我可以这样沉默和恢复sys.stdout
:
import sys
sys.stdout = None
print('hello') # does not write to stdout
sys.stdout = sys.__stdout__
print('hello') # writes to stdout
我知道我最好使用contextlib.redirect_stdout
这可能会做类似的事情,但我的问题是:为什么上面的代码有用?
我认为python会调用像sys.stdout.write()
这样的内容,所以无论我替换sys.stdout
,都应该使用write
方法(例如io.StringIO
)至少
答案 0 :(得分:11)
print
has an explicit check for None
.
/* sys.stdout may be None when FILE* stdout isn't connected */
if (file == Py_None)
Py_RETURN_NONE;