Symfoware

Symfowareについての考察blog

Pythonで一時ファイル作成(tempfile)

せっかく調べたのでメモ。

Pythonでテンポラリファイルを作成する方法。
http://www.python.jp/doc/2.5/lib/module-tempfile.html

tempfileというモジュールを使用すれば、安全に実装できそう。
コマンドプロンプトを起動し、動作を確かめてみました。


C:\>python
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tempfile
>>> f = tempfile.TemporaryFile()
>>> dir(f)
['__doc__', '__enter__', '__getattr__', '__init__', '__module__', 'close_called'
, 'file', 'name']

### nameで作成されたテンポラリファイルのフルパスが取得できる
>>> f.name
'c:\\users\\name\\appdata\\local\\temp\\tmpms6g1x'

### 文字を書き込み
>>> f.write("DB\n")




ここでメモ帳から「c:\\users\\name\\appdata\\local\\temp\\tmpms6g1x」を
開こうとすると・・・

01_001_20110428102118.png


テンポラリファイル使用中は、ロック状態になるようです。


>>> f.close()



としてファイルを閉じると同時に、テンポラリファイルは
自動的に削除されます。



ちなみに、NamedTemporaryFile()を使用しても、ファイルはロックされている状態です。


>>> f = tempfile.NamedTemporaryFile()
>>> f.name
'c:\\users\\name\\appdata\\local\\temp\\tmpwmdklm'
>>> f.write("DB\n")

### ここでメモ帳からファイルを開こうとしても開けない

>>> f.close()

### closeするとファイルが消える




実は、実行時にオプションを記載したファイルのパスを引数に取るexeを
Pythonのsubprocessを使って呼び出そうとしています。

引数に渡すファイルをtempfileで作り、subprocessで呼び出し。
subprocessが終了したらtempfileをcloseというプログラムを書こうと
思っていたのですが、tempfileで作成したファイルがロック状態になるので
この手は使えなさそうです。

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2011/04/28(木) 10:21:41|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
前のページ 次のページ