私は以下を使用してtmpファイルを作成しています:
from tempfile import mkstemp
私はこのファイルに書き込もうとしています:
tmp_file = mkstemp()
file = open(tmp_file, 'w')
file.write('TEST\n')
確かに私はファイルを閉じて適切に実行しますが、tmpファイルをcatしようとすると、まだ空のままです。基本的に見えますが、なぜ機能しないのかわかりません。説明はありますか?
mkstemp()
は、ファイル記述子とパスを含むタプルを返します。問題はあなたが間違った道に書いていることだと思います。 ('(5, "/some/path")'
のようなパスに書き込んでいます。)コードは次のようになります。
from tempfile import mkstemp
fd, path = mkstemp()
# use a context manager to open the file at that path and close it again
with open(path, 'w') as f:
f.write('TEST\n')
# close the file descriptor
os.close(fd)
Smarxによる回答は、path
を指定してファイルを開きます。ただし、代わりにfd
を指定する方が簡単です。その場合、コンテキストマネージャはファイル記述子を自動的に閉じます。
from tempfile import mkstemp
fd, path = mkstemp()
# use a context manager to open (and close) file descriptor fd (which points to path)
with open(fd, 'w') as f:
f.write('TEST\n')
# This causes the file descriptor to be closed automatically
この例では、Pythonファイル記述子を os.fdopen
かっこいいものを書いて、それを閉じます(with
コンテキストブロックの最後で)。他のPython以外のプロセスがファイルを使用できます。そして最後に、ファイルが削除されます。
import os
from tempfile import mkstemp
fd, path = mkstemp()
with os.fdopen(fd, 'w') as fp:
fp.write('cool stuff\n')
# Do something else with the file, e.g.
# os.system('cat ' + path)
# Delete the file
os.unlink(path)