为什么sys.stdout =无效?

时间:2018-04-10 15:34:00

标签: python python-3.x stdout python-internals

我可以这样沉默和恢复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)至少

1 个答案:

答案 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;