禁用輸出緩沖Python的解釋器默認啟用輸出緩沖sys.stdout嗎?如果答案是肯定的,那么禁用它的所有方法是什么?建議到目前為止:使用-u命令行開關包裝sys.stdout在每次寫入后刷新的對象設置PYTHONUNBUFFEREDenv varsys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)是否有任何其他方式來設置一些全局標志sys/ sys.stdout程序執行過程中?
4 回答

桃花長相依
TA貢獻1860條經驗 獲得超8個贊
您可以使用“python -u”(或#!/ usr / bin / env python -u等)或通過設置環境變量PYTHONUNBUFFERED跳過整個python進程的緩沖。
您還可以將sys.stdout替換為其他流,例如在每次調用后執行刷新的包裝器。
class Unbuffered(object): def __init__(self, stream): self.stream = stream def write(self, data): self.stream.write(data) self.stream.flush() def writelines(self, datas): self.stream.writelines(datas) self.stream.flush() def __getattr__(self, attr): return getattr(self.stream, attr)import sys sys.stdout = Unbuffered(sys.stdout)print 'Hello'

ABOUTYOU
TA貢獻1812條經驗 獲得超5個贊
我寧愿把答案放在如何刷新Python打印輸出?或者在Python的print函數中,在調用緩沖區時刷新緩沖區?,但由于它們被標記為這個副本(我不同意),我會在這里回答。
由于Python 3.3 print()支持關鍵字參數“flush”(參見文檔):
print('Hello World!', flush=True)

四季花海
TA貢獻1811條經驗 獲得超5個贊
# reopen stdout file descriptor with write mode# and 0 as the buffer size (unbuffered)sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
致謝:“塞巴斯蒂安”,在Python郵件列表的某個地方。
第三方編輯
最新版本的Python 3不支持

臨摹微笑
TA貢獻1982條經驗 獲得超2個贊
是的。
您可以使用“-u”開關在命令行上禁用它。
或者,您可以在每次寫入時在sys.stdout上調用.flush()(或者使用自動執行此操作的對象將其包裝)
添加回答
舉報
0/150
提交
取消