web-dev-qa-db-ja.com

一時ファイルへの書き込み許可が拒否されました

Pythonを使用してWindows OSで一時ファイルを作成して書き込みをしようとしています。 Python module tempfileを使用して一時ファイルを作成しました。

しかし、その一時ファイルを書きに行くと、エラーが発生しますPermission Denied。一時ファイルへの書き込みは許可されていませんか?!私は何か間違ったことをしていますか?一時ファイルを作成して書き込みたい場合、Pythonではどのようにすればよいですか?ローカルではなく、セキュリティのために一時ディレクトリに一時ファイルを作成したいと思います(.exeが実行されているディレクトリに)。

IOError: [Errno 13] Permission denied: 'c:\\users\\blah~1\\appdata\\local\\temp\\tmpiwz8qw'

temp = tempfile.NamedTemporaryFile().name
f = open(temp, 'w') # error occurs on this line
20
Mack

NamedTemporaryFile実際にはcreatesファイルを作成します。書き込みのためにファイルを開く必要はありません。

実際、 Python docs 状態:

名前を使用してもう一度ファイルを開くことができるかどうか、名前付きの一時ファイルがまだ開いているかどうかは、プラットフォームによって異なります(UNIXではこのように使用できます。Windows NTでは使用できません。後で)。

そのため、権限エラーが発生します。あなたがおそらく何をしているのですか:

f = tempfile.NamedTemporaryFile(mode='w') # open file
temp = f.name                             # get name (if needed)
36
paxdiablo

以下のように削除パラメーターを使用します。

tmpf = NamedTemporaryFile(delete=False)

ただし、一時ファイルを使い終わったら、一時ファイルを手動で削除する必要があります。

tmpf.close()
os.unlink(tmpf.name)

バグのリファレンス: https://github.com/bravoserver/bravo/issues/111

よろしく、Vidyesh

1
Vidyesh Ranade

コードの2行目でファイルが開いているため、権限が拒否されました。

最初にf.close()で閉じてから、一時ファイルへの書き込みを開始できます

0
Richie Zubiri