Для небольшого скрипта на python я хотел бы использовать временный файл с модулем tempfile. Каким-то образом это не дает ожидаемого поведения, и я не знаю, что я делаю неправильно или это ошибка:
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]'
В качестве альтернативы я пробовал только в текстовом режиме, но поведение все еще странно:
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('w+t')
>>> tmp.read()
''
>>> tmp.write('test')
>>> tmp.read()
'\x00\xa5\x8b\x02int or long, hash(a) is used instead.\n i\x10 [ommitted]'
>>> tmp.seek(0)
>>> tmp.readline()
'test\x00\xa5\x8b\x02int or long, hash(a) is used instead.\n'
Любая помощь приветствуется!
Дополнительная информация: Python 2.7.2 (32-разрядный) из текущего дистрибутива Python XY, работающий на компьютере под управлением Windows 7 Enterprise x64. В ходе пробного запуска python создал временное имя файла "tmpvyocxj" в моем временном каталоге в папке D: \ temp \ myusername, где запущено несколько других процессов python. Команды, которые были введены, я не пытался воспроизвести в сценарии. Поведение остается неизменным, и никакие другие процессы Python не выполняются.
Обновление:
Это поведение не ограничивается модулем tempfile, но также и для обычных операций file.read () и file.write (). Согласно CPython парни обе функции вызывают только базовые подпрограммы libc fread (). В стандарте C точное поведение чтения после записи без поиска или сброса между ними не определено, то есть каждая реализация может привести к разным результатам.