Python 学習:file.flush() メソッド

2015-12-03 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
6、2、1、0、1、 0、0、0、0、0(41)で、換算ポイント 84pt 。
「Firefox」6位ダウン、5位アップ。「化学業界」「硝子業界」、
「e-radio」「グルコサミン」「FM COCOLO」bg値変動のみ。
「C言語」「Perl」「Python」「FM青森」全く変化無し。
・-・ - -・

さて、本文。

Python 2.7ja1 documentation」の
Python 標準ライブラリ」の
5.9. ファイルオブジェクト」にある、
メッソド一覧に、
「file.flush()」
  stdio の fflush() のように、内部バッファをフラッシュします。
  ファイル類似のオブジェクトによっては、この操作は何も行いません。
がある。


つまり、
「テクデップ(Techdep)」ブログの、2015-05-09 付記事:
ファイルバッファの強制フラッシュ(Python)

  ファイルの書き出し処理といっても直ちにディスクに
  そのファイルが書き出されるわけではない。
  ディスクへの書き出しが遅れうるという挙動を失念して居て、
  以下のコードで意図通りの動作にならず困ったことがあった。

  ・・・・・
  ・・・・・

  「あるファイルを事前に書き出して、事前出力したファイルを
  入力として外部プログラムが諸々の処理をする」という単純なコードだ。
  しかしながら、場合によっては、subprocess.call()の時点で
  入力となるべきファイルが空ファイルの可能性もあり、
  意図通りの動作にならないのである。

  ディスクへの書き出しは直ちに実行されない
  ファイルの書き出し処理とはいっても、Pythonインタプリンタは
  データをファイルバッファに渡したら次の処理に進んでしまう。
  ファイルのclose処理がされた時点でもディスク上に実体がある保証はない。
  ファイルの中身が依然としてバッファに格納されたままで、
  ディスク上は空ファイルのままのこともある。
  このバッファがいつ書き出されるかはインタプリンタの制御下にあり、
  最遅としてプロセス終了時に漸くディスクへの書き出しが始まることもある。

  ・・・・・
  ・・・・・

の如くですね。


やはり、強制的に書き出させたい、こともある。

それで、「Python」のドキュメントを改めて見た訳である。


適時、“file.flush()”を実行すべき。

だが、ドキュメントには補足があった。

  ノート
   flush() は必ずしもファイルのデータをディスクに書き込むとは限りません。
   そのような挙動を保証するには flush() の後に
   os.fsync() を使って下さい。

が載っている。


Python 2.7ja1 ドキュメントの
15. 汎用オペレーティングシステムサービス」の
15.1. os - 雑多なオペレーティングシステムインタフェース」の
「15.1.3. ファイル記述子の操作」にある、

  os.fsync(fd)

   ファイル記述子 fd を持つファイルのディスクへの書き込みを強制します。
   Unix では、ネイティブの fsync() 関数を、
   Windows では MS _commit() 関数を呼び出します。

   Python のファイルオブジェクト f を使う場合、
   f の内部バッファを確実にディスクに書き込むために、
   まず f.flush() を実行し、それから os.fsync(f.fileno()) してください。

   利用できる環境: Unix, Windows (2.2.3 以降)

ですね。

これが重要ですね。


本日はここまで。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


151123
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
02 | 2017/03 | 03
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク