43

Python では、一般的に -close()ファイル オブジェクトに対する操作は操作を意味しflush()ますか?

4

5 に答える 5

36

はい。それはあなたのためにそれを行う基礎となるclose()関数を使用します(source)。

于 2010-03-15T12:50:59.667 に答える
19

注意:データがディスク上で実際に安全であることを保証するものではclose()ありflush()ません。OS に data == があり、プロセス内でバッファリングされていないことを確認するだけです。

sync または fsync を試して、データをディスクに書き込むことができます。

于 2010-03-15T12:57:18.900 に答える
3

はい、Python 3 では、これは最終的に公式ドキュメントになりましたが、Python 2 ではすでにそうでした ( Martin の回答を参照)。

于 2018-07-03T06:56:05.663 に答える
-8

filehandle.close は必ずしもフラッシュするとは限りません。驚いたことに、filehandle.flush も役に立ちません。Python が実行されているときに、OS バッファでスタックする可能性があります。ファイルに書き込み、ファイルを閉じ、Ctrl-Z でシェル コマンド プロンプトに移動し、ファイルを調べた次のセッションを観察します。

$  cat xyz
ghi
$ fg
python

>>> x=open("xyz","a")
>>> x.write("morestuff\n")
>>> x.write("morestuff\n")
>>> x.write("morestuff\n")
>>> x.flush
<built-in method flush of file object at 0x7f58e0044660>
>>> x.close
<built-in method close of file object at 0x7f58e0044660>
>>> 
[1]+  Stopped                 python
$ cat xyz
ghi

その後、ファイルを再度開くことができます。これにより、必ずファイルが同期されます (この場合、ファイルを追加モードで開くため)。他の人が言ったように、sync syscall (os パッケージから入手可能) はすべてのバッファをディスクにフラッシュする必要がありますが、システム全体のパフォーマンスに影響を与える可能性があります (システム上のすべてのファイルを同期します)。

于 2012-09-14T19:56:53.357 に答える