2012-12-08 33 views
0

tempfile.mktemp在Python 2.7折舊路徑I生成臨時文件的唯一路徑如下:剛生成的臨時文件

temp = tempfile.NamedTemporaryFile(suffix=".py") 
path_to_generated_py = temp.name 
temp.close() 
# now I use path_to_gerated_py to create a python file 

這是在Python 2.7的推薦方法?當我立即關閉臨時文件時,它看起來像是誤用NamedTemporaryFile ....

+1

我認爲這是一個好方法。但是,爲什麼不直接掛在文件句柄上並直接使用它? – wim

+0

..因爲我正在使用需要路徑的第三方庫。 – rocksportrocker

+0

我的https://pypi.python.org/pypi/shelljob庫也有一個簡單的方法來創建命名的臨時對象,它們在'with'後面被刪除。 –

回答

2

tempfile.mktemp()的直接替換是tempfile.mkstemp()。後者創建文件,如NamedTemporaryFile,因此您必須關閉它(如在您的代碼片段中)。與NamedTemporaryFile的區別在於該文件在關閉時不會被刪除。這實際上是必需的:您的版本具有理論競爭條件,其中兩個進程可能以相同的臨時文件名結束。如果您使用mkstemp()來代替,則該文件不會被刪除,並且可能會被您使用的第三方庫覆蓋 - 但是在任何時間點,文件都存在,因此不存在另一個進程會創建的風險一個同名的臨時文件。