python中的无缓冲stdout(如python -u)从程序内部

可能重复:
Python输出缓冲

有没有办法从我的代码中获得运行python -u的效果? 如果没有,我的程序可以检查它是否在-u模式下运行,如果没有,退出并显示错误消息? 这是在Linux(Ubuntu 8.10服务器)

最好的我可以拿出:

>>> import os >>> import sys >>> unbuffered = os.fdopen(sys.stdout.fileno(), 'w', 0) >>> unbuffered.write('test') test>>> >>> sys.stdout = unbuffered >>> print 'test' test 

testing在GNU / Linux上。 它似乎也应该在Windows上工作。 如果我知道如何重新打开sys.stdout,那将会容易得多:

 sys.stdout = open('???', 'w', 0) 

参考文献:
http://docs.python.org/library/stdtypes.html#file-objects
http://docs.python.org/library/functions.html#open
http://docs.python.org/library/os.html#file-object-creation

[编辑]

请注意,在覆盖之前closuressys.stdout可能会更好。

您可以随时在shebang行中传递-u参数:

 #!/usr/bin/python -u 

您可能会使用stderr永远不会被缓冲的事实,并尝试将stdoutredirect到stderr:

 import sys #buffered output is here doStuff() oldStdout = sys.stdout sys.stdout = sys.stderr #unbuffered output from here on doMoreStuff() sys.stdout = oldStdout #the output is buffered again doEvenMoreStuff() 

假设你在Windows上:

 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)