对于一个小python脚本,我希望使用tempfile模块的临时文件。不知何故,它没有给出预期的行为,我不知道我做错了什么,或者这是一个bug:Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tempfile
>>> tmp = tempfile.TemporaryFile()
>>> tmp.read()
''
>>> tmp.write('test')
>>> tmp.read()
'P\xf6D\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ [ommitted]'
或者,我只尝试使用文本模式,但行为仍然很奇怪:
^{pr2}$
感谢任何帮助!在
其他信息:在Windows7Enterprisex64计算机上运行的当前PythonXY发行版中的Python2.7.2(32位)。在一个测试运行中,python在D:\temp\myusername下的临时目录中创建了临时文件名“tmpvyocxj”,其他几个python进程正在运行。输入的命令,我没有尝试在脚本中复制它。在没有其他python进程运行的情况下,行为没有改变。在
更新:
这种行为不仅限于tempfile模块,也适用于普通的文件.read()和文件.写入()操作。根据CPython的说法,这两个函数都只调用底层libc fread()例程。在C标准中,没有seek或flush中间的read-after-write的确切行为是未定义的,即每个实现都可能导致不同的结果。在