1

tempfile.NamedTemporaryFile を作成するテスト セットアップ メソッドがあります。次にテストするコードは、そのファイルの内容を読み取る必要があります。それを行うと、ファイルが空のように見えます。

import tempfile

fp1 = tempfile.NamedTemporaryFile()
fp1.write('foo')
fp2 = open(fp1.name)
print fp2.read()  # I expect "foo" here
4

1 に答える 1

1

これが発生する理由は、書き込みメソッドが「バッファリング」されているためです。つまり、ファイルシステムへのすべての write() 呼び出しがすぐにディスクに変更をもたらすわけではありません。これを解決するには、いくつかの方法があります。

write() の後に flush()

import tempfile

fp1 = tempfile.NamedTemporaryFile()
fp1.write('foo')
fp2 = open(fp1.name)
# Because of buffering we've not yet written to the file.
assert fp2.read() == ''
fp1.flush()
# We've now explicitly written to the file.
assert fp2.read() == 'foo'
fp1.close()
fp2.close()

または、バッファリングを 0 に設定することもできます。これは、「バッファリングせずにすぐにディスクに書き込む」という醜い方法です。

# Let's do it again, but now use buffering.
fp1 = tempfile.NamedTemporaryFile(bufsize=0)
fp1.write('foo')
fp2 = open(fp1.name)
# Because we've set buffering to 0 (so no buffering) we've written to the
# file.
assert fp2.read() == 'foo'
fp1.close()
fp2.close()
于 2013-11-12T15:09:53.020 に答える