1 回答

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
這里發(fā)生的事情是,在您的第一個(gè)會(huì)話中,在您完成f.write(...)
. (請(qǐng)注意,您還沒(méi)有關(guān)閉該文件。)在您的新終端中,您使用起始文件指針 0 寫入文件,然后輸出緩沖區(qū)被完全刷新到文件,因?yàn)槟P(guān)閉了文件。
如果您在完成此操作后立即檢查輸出文件,那么您會(huì)發(fā)現(xiàn)內(nèi)容只是I am going to do the same.
. 但是,一定是在您檢查文件時(shí),您已經(jīng)從第一個(gè)會(huì)話中清除了緩沖區(qū)的內(nèi)容——這可能是因?yàn)槟呀?jīng)退出了 python 會(huì)話,或者因?yàn)槟呀?jīng)完成了顯式f.close()
或f.flush()
. 這將導(dǎo)致緩沖What is this?
被寫入文件。但是起始文件指針也是 0,因?yàn)榈谝粋€(gè)會(huì)話中的原始文件open
會(huì)將其定位在開(kāi)頭(也會(huì)截?cái)嗳魏维F(xiàn)有內(nèi)容)。所以它會(huì)覆蓋之前的部分I am going to do the same.
,導(dǎo)致觀察到的行為。
如果您有兩個(gè)進(jìn)程都附加到同一個(gè)文件并且您希望確保避免寫入沖突,那么您需要執(zhí)行以下操作:
a
或r+
模式打開(kāi)文件當(dāng)一個(gè)進(jìn)程想要寫入時(shí),它必須:
等待文件的獨(dú)占鎖
尋找文件的末尾
寫輸出
刷新輸出
釋放鎖
但是文件鎖定的細(xì)節(jié)超出了這個(gè)問(wèn)題的范圍。
添加回答
舉報(bào)