3 回答

TA貢獻1841條經驗 獲得超3個贊
正如查爾斯已經提到的那樣,問題正在緩沖。在為SNMPd編寫一些模塊時遇到了類似的問題,并通過用自動刷新版本替換stdout來解決了該問題。
我使用了以下代碼,這些代碼受到ActiveState上一些帖子的啟發:
class FlushFile(object):
"""Write-only flushing wrapper for file-type objects."""
def __init__(self, f):
self.f = f
def write(self, x):
self.f.write(x)
self.f.flush()
# Replace stdout with an automatically flushing version
sys.stdout = FlushFile(sys.__stdout__)

TA貢獻1712條經驗 獲得超3個贊
進程輸出被緩沖。在更多的UNIXy操作系統(或Cygwin)上,可以使用pexpect模塊,該模塊列舉了所有必要的方法以避免與緩沖相關的問題。但是,這些要求需要一個有效的pty模塊,該模塊在本機(非Cygwin)win32 Python構建中不可用。
在控制子流程的示例情況下,可以僅sys.stdout.flush()在必要時調用它-但是對于任意子流程,該選項不可用。
另請參見問題“為什么不只使用管道(popen())?” 在pexpect常見問題解答中。

TA貢獻1911條經驗 獲得超7個贊
據我所知,是由應用程序代碼確定輸出緩沖區的大小。我認為您不能在外部做任何事情,除非它是動態鏈接的并且您預先加載了一個替換系統調用的庫。但這是一個巨大的突破,超出了此問題的范圍:)
添加回答
舉報