慎用python os庫

你猜不到的答案

  • 第一行代碼,正常情況下不會有什么問題,可以一旦當這個文件太大,就會引發(fā)OOM(out of memory)錯誤,導致cp那個命令執(zhí)行失敗,下面這句話畫重點,這個錯誤不會拋異常、不會拋異常、不會拋異常。(重要的事情說三遍)
  • 第二行代碼,正常情況下也不會有什么問題,可以當你a b兩個目錄不在同一個磁盤或者是nfs這種共享目錄的話,就會導致a文件在move之后不會被刪除。

這是為什么了

  • os.system 這個函數(shù)在linux環(huán)境下,只是封裝了c語言的system這個函數(shù),并且沒做任何修改,所以,system函數(shù)返回什么,os.system就返回什么,而正常c語言system這個函數(shù)是啟動的子進程被殺是不會發(fā)生異常的。

  • os.rename 這個函數(shù)在源文件和目的文件在一個硬盤,不會有問題,但是當不同磁盤間移動時,就會出問題,用官方的話說

    The operation may fail on some Unix flavors if src and dst are on different filesystems
    

但是一旦成功,就是個原子操作,就是說,可mv命令一致了。

解決方案

  • os.system 可以是用subprocess模塊代替
  • os.rename 使用shutil模塊代替,shutil提供了文件處理相關(guān)的函數(shù)

最后說一句

  • os庫里的好多函數(shù)都已經(jīng)過期了,推薦大家在以后的編碼中,盡量不要使用os庫里的函數(shù),萬一掉進去,都是巨深無比的坑。

點一下給你更多,你的點擊,將給我更多的分享動力。(其實就是的我博客太冷清了,慘)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容