Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 文件上的第二个文件处理程序的行为异常_Python_File_Testing_Io - Fatal编程技术网

Python 文件上的第二个文件处理程序的行为异常

Python 文件上的第二个文件处理程序的行为异常,python,file,testing,io,Python,File,Testing,Io,我有一个测试设置方法,在其中创建tempfile.NamedTemporaryFile。然后我要测试的代码需要读取该文件的内容。当它这样做时,看起来文件是空的 import tempfile fp1 = tempfile.NamedTemporaryFile() fp1.write('foo') fp2 = open(fp1.name) print fp2.read() # I expect "foo" here 发生这种情况的原因是写入方法在 换句话说,并非所有对文件系统的write()

我有一个测试设置方法,在其中创建tempfile.NamedTemporaryFile。然后我要测试的代码需要读取该文件的内容。当它这样做时,看起来文件是空的

import tempfile

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

发生这种情况的原因是写入方法在 换句话说,并非所有对文件系统的write()调用都会立即产生结果 在磁盘上进行更改。有多种方法可以解决此问题:

写入()后刷新()

或者您可以将缓冲设置为0,这是一种表示“不要”的丑陋方式 缓冲区,但立即写入磁盘”


发生这种情况的原因是写入方法在 换句话说,并非所有对文件系统的write()调用都会立即产生结果 在磁盘上进行更改。有多种方法可以解决此问题:

写入()后刷新()

或者您可以将缓冲设置为0,这是一种表示“不要”的丑陋方式 缓冲区,但立即写入磁盘”

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()
# 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()