可能重复:
Python输出缓冲
有没有办法从我的代码中获得运行python -u的效果?如果失败了,我的程序可以检查它是否在-u模式下运行并退出并显示错误消息,如果没有?这是在linux上(ubuntu 8.10服务器)
Bas*_*ard 45
我能想到的最好的:
>>> import os
>>> import sys
>>> unbuffered = os.fdopen(sys.stdout.fileno(), 'w', 0)
>>> unbuffered.write('test')
test>>>
>>> sys.stdout = unbuffered
>>> print 'test'
test
Run Code Online (Sandbox Code Playgroud)
在GNU/Linux上测试过.它似乎也适用于Windows.如果我知道如何重新打开sys.stdout,那将更容易:
sys.stdout = open('???', 'w', 0)
Run Code Online (Sandbox Code Playgroud)
参考文献:
http://docs.python.org/library/stdtypes.html#file-objects
http://docs.python.org/library/functions.html#open
http://docs.python.org/library/ os.html#文件对象创建
[编辑]
请注意,在覆盖之前关闭sys.stdout可能会更好.
mik*_*ers 26
你总是可以在shebang行中传递-u参数:
#!/usr/bin/python -u
Run Code Online (Sandbox Code Playgroud)
假设你在Windows上:
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
Run Code Online (Sandbox Code Playgroud)
......在Unix上:
fl = fcntl.fcntl(sys.stdout.fileno(), fcntl.F_GETFL)
fl |= os.O_SYNC
fcntl.fcntl(sys.stdout.fileno(), fcntl.F_SETFL, fl)
Run Code Online (Sandbox Code Playgroud)
(Unix从注释解决方案中复制而不是链接.)
您可能会使用以下事实:stderr从不缓冲并尝试将stdout重定向到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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51902 次 |
| 最近记录: |