2012-05-10 24 views
7

は(2.7でこれを試してみましたが、下)には、umaskの指示に従うようには見えないtempfile.NamedTemporaryFileを使用して作成されたファイルのようになります。pythonでtempfile.NamedTemporaryFileのumaskを設定することはできますか? Pythonで

import os, tempfile 
os.umask(022) 
f1 = open ("goodfile", "w") 
f2 = tempfile.NamedTemporaryFile(dir='.') 
f2.name 

Out[33]: '/Users/foo/tmp4zK9Fe' 

ls -l 
-rw------- 1 foo foo 0 May 10 13:29 /Users/foo/tmp4zK9Fe 
-rw-r--r-- 1 foo foo 0 May 10 13:28 /Users/foo/goodfile 

NamedTemporaryFileは、umaskのをピックアップしない理由任意のアイデア?ファイル作成中にこれを行う方法はありますか?

私はいつもos.chmod()でこれを回避することができますが、私はファイル作成中に正しいことをしたことを期待していました。

答えて

22

これはセキュリティ機能です。 NamedTemporaryFileは、chmodで開くまでプロセスにはプライベートなので、0600モードで常に作成され、tempfile.py, line 235にハードコードされます。この動作を変更するコンストラクタ引数はありません。それが誰かを助けるかもしれない場合

+2

おかげ - お奨めの中で特定の行にリンクする答えを愛し起源! – shreddd

+0

あなたの答えをありがとう。私はちょうどこれが奇妙であることに気付くでしょう、そうでなければ、私は私が望むことをする別の方法を逃しています。私は単純にNamedTemporaryFileを使用するようにしています。エラーを生成するとエラーが発生しますが、それを正常なオープン(名前、 'w')で作成したファイルに移動すると破棄できます。 フィーチャーリクエストのように.... – nealmcb

2

が、私は多かれ少なかれ同じことをやってみたかった、ここで私が使用しているコードです:

import os 
from tempfile import NamedTemporaryFile 

def UmaskNamedTemporaryFile(*args, **kargs): 
    fdesc = NamedTemporaryFile(*args, **kargs) 
    umask = os.umask(0) 
    os.umask(umask) 
    os.chmod(fdesc.name, 0o666 & ~umask) 
    return fdesc 
+1

ちょうど私が欲しかった!私たちがやろうとしている低レベルの配管工事をしてくれてありがとう! – nealmcb

関連する問題