質問: いつもお世話になっております。 pythonの処理にて、Linux(ubuntu)環境での動作と、windows環境での動作に違いがあり、 原因を調べてみたのですが、原因が良く分からない為ご質問させて下さい。 <バージョン> python2.7.15 <ソースコード一部抜粋> import codecs with codecs.open(file_path, 'w', 'utf-8') as f: f.write(msg) <動作環境での違い> Amazon Linux ・・・ msgに記述した内容が全てファイルに書きこまれる Ubuntu・・・ msgに記述した内容が全てファイルに書きこまれる Windows8.1・・・ msgに記述した内容が途中で切れている。(毎回50行目の途中で切れる) <やってみたこと> 色々調べてみましたが、なぜwindowsだと途中で切れるのか原因は分かりませんでしたが、 ためしに、以下のように修正したところ、ファイルへの書き込みが途中で切れなくなりました。 <修正後のソースコード> import codecs with codecs.open(file_path, 'w', 'utf-8') as f: f.write(msg) f.close() <ご質問事項> 皆さまご存じの通り、with構文でファイルをopenしていますので、ファイルのclose処理は不要な認識でした。 しかし、実際に私の環境で試した限りだと、f.close()をしないとwindows環境では、書き込みメッセージが 途中で切れるという現象が発生していました。 この件につきまして、どなたか原因にお心あたりがございましたらご教授頂けないでしょうか? 以上です。どうぞ宜しくお願い致します。
回答: どこかのバッファの動きの差異で結果が異なっている気がします。 1. `os.fsync()`を`f.write(msg)`のあとに呼んでみる 2. `codecs.open`に`buffering=0`を渡してみる 3. `wrote = f.write(msg)`として`wrote`と`len(msg)`を比べてみる