Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 28, 2009 08:43:44

pioner
От:
Зарегистрирован: 2009-10-21
Сообщения: 146
Репутация: +  0  -
Профиль   Отправить e-mail  

file.name в разных версиях питона?

Ed
На линухе при использовании TemporaryFile файл удаляется после создания, так что можно считать,
что имени у него нет, то есть узнавать нечего.

PS: Между прочим я это уже третий раз пишу, а вы хамите в ответ на совет читать внимательнее.
Дружище, вы сильно впечатлительны, если за хамство принимаете критику.
Временные файлы удаляются по закрытии скрипта, иначе в них смысла нет.



Офлайн

#2 Окт. 28, 2009 09:01:49

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

file.name в разных версиях питона?

pioner
Временные файлы удаляются по закрытии скрипта, иначе в них смысла нет.
Нет, это неправльно, такие файлы удаляются только тогда, когда они явно закрыты, или переменная-дескриптор будет собрана Garbage Colector'ом. Более детально читаем тут:
http://docs.python.org/library/tempfile.html#tempfile.TemporaryFile

P.S. Да разрешит ваш спор могучий документаций



Офлайн

#3 Окт. 28, 2009 10:24:34

pioner
От:
Зарегистрирован: 2009-10-21
Сообщения: 146
Репутация: +  0  -
Профиль   Отправить e-mail  

file.name в разных версиях питона?

regall
pioner
Временные файлы удаляются по закрытии скрипта, иначе в них смысла нет.
Нет, это неправльно, такие файлы удаляются только тогда, когда они явно закрыты, или переменная-дескриптор будет собрана Garbage Colector'ом. Более детально читаем тут:
http://docs.python.org/library/tempfile.html#tempfile.TemporaryFile

P.S. Да разрешит ваш спор могучий документаций
На прикладном уровне достаточно такого понимания, что я изложил.
Спора нет, а есть уход в другую тему, чего не хотелось бы.

И так. В виндах file.name есть.
есть сообщение, что в линуксах его может не быть.
пока сам не пробовал - попробую сюда сообщю ОБЯЗЯТЕЛЬНО!
а пока собираются мнения и опыт форумчан.

Надо для загрузки файла на сервер через веб-форму не читая содержимого, а делать копию в другом месте для версии питона не выше 2.3.



Офлайн

#4 Окт. 28, 2009 16:50:22

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

file.name в разных версиях питона?

pioner
Дружище, вы сильно впечатлительны, если за хамство принимаете критику.
Необоснованную критику, заметьте. В свою очередь не могу не заметить, что вы сильно невнимательны, если после трех упоминаний о том, 
что у файла нет имени пытаетесь это имя получить.

Временные файлы удаляются по закрытии скрипта, иначе в них смысла нет.
Попытаюсь объяснить поподробнее, раз простое повторение не работает.
Итак, смотрим на код TemporaryFile и видим сначала этот комментарий:
Returns an object with a file-like interface. The file has no name, and will cease to exist when it is closed.
А потом этот код:
_os.unlink(name)
return _os.fdopen(fd, mode, bufsize)
Именно в этом месте имя файла перестает существовать, точнее после _os.unlink(name)

Отвечу также на непрозвучавший вопрос 'А что же сделать, чтобы имя было?'. Ответ на него уже прозвучал, как ни странно - юзать NamedTemporaryFile.
Если вам интересно как это сделать - покажите ваш код, я расскажу, если смогу.



Офлайн

#5 Окт. 29, 2009 22:49:53

pioner
От:
Зарегистрирован: 2009-10-21
Сообщения: 146
Репутация: +  0  -
Профиль   Отправить e-mail  

file.name в разных версиях питона?

Ed
Отвечу также на непрозвучавший вопрос 'А что же сделать, чтобы имя было?'. Ответ на него уже прозвучал, как ни странно - юзать NamedTemporaryFile.
Если вам интересно как это сделать - покажите ваш код, я расскажу, если смогу.
Посмотрел код. Буду рассуждать так -
Удаление имени временного файла, в зависимости от платформы, видимо, связано с тем, что-бы чистильщик временной папки, если такой есть, не удалил сам файл. И автор метода оставляет только дискриптор файла, не подумав при этом, что я могу сделать хранилищем свою директорию по выбору и сам заботиться о ее непереполнении.

Мой код вам не нужен, и вы знаете об этом.

“Обмануть” модуль CGI, который использует TemporaryFile можно попробовать.
Временно прописать os.name…или в os.modules записать ссылку на свой метод…и то и другое надо пробовать…
Можно модифицировать пару строк (ОДНУ СТРОКУ!) у CGI и поместить в свою библиотеку, а именно, в самом модуле заменить TemporaryFile на NamedTemporaryFile…и все! При этом в os.environ и т.п. записать свои значения.

Хорошо! что есть исходники!
Плохо, что до сих пор не сделали модуль с возможностью задать свою TMP папку.



Офлайн

#6 Окт. 30, 2009 09:25:10

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

file.name в разных версиях питона?

pioner
Посмотрел код. Буду рассуждать так -
Удаление имени временного файла, в зависимости от платформы, видимо, связано с тем, что-бы чистильщик временной папки, если такой есть, не удалил сам файл.
Нет такого.

И автор метода оставляет только дискриптор файла, не подумав при этом, что я могу сделать хранилищем свою директорию по выбору и сам заботиться о ее непереполнении.
Если вы имеете в виду автора tempfile, то он предоставил возможность создать временный файл с именем.

Мой код вам не нужен, и вы знаете об этом.
Не нужен был бы - не говорил. Мне собственно все равно что это будет - ваш настоящий код или кусочек, объясняющий чего вы пытаетесь сделать. Потому что из вышеизложенного у меня пока вывод один - вы хотите странного.



Офлайн

#7 Окт. 30, 2009 09:42:55

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

file.name в разных версиях питона?

Ed
Не нужен был бы - не говорил. Мне собственно все равно что это будет - ваш настоящий код или кусочек, объясняющий чего вы пытаетесь сделать. Потому что из вышеизложенного у меня пока вывод один - вы хотите странного.
не наседайте на человека так, учтите, что он пришел из PHP…

P.S. А код-таки увидеть хотелось бы .



Офлайн

#8 Окт. 30, 2009 09:57:40

pioner
От:
Зарегистрирован: 2009-10-21
Сообщения: 146
Репутация: +  0  -
Профиль   Отправить e-mail  

file.name в разных версиях питона?

pioner
…чистильщик временной папки, если такой есть, не удалил сам файл.
Ed
Нет такого.
тогда это надо для ДЕЙСТВИТЕЛЬНО уникального имени файла созданного по дискриптору?

Ed
Если вы имеете в виду автора tempfile, то он предоставил возможность создать временный файл с именем.
Речь идет о модуле CGI, который использует модуль tempfile.

pioner
Мой код вам не нужен…
Ed
Не нужен был бы - не говорил. …
… у меня пока вывод один - вы хотите странного.
код: fileobject.name - и все! который раз уже написан!
Я хочу:
pioner
Надо для загрузки файла на сервер через веб-форму не читая содержимого, а делать копию в другом месте для версии питона не выше 2.3..
т.е. копировать файл с помошью copy().
И чего тут странного?



Офлайн

#9 Окт. 30, 2009 10:28:29

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

file.name в разных версиях питона?

regall
не наседайте на человека так, учтите, что он пришел из PHP…
Я пытаюсь помочь. Предложил помощь, сказал чего мне надо. А мне в ответ объясняют что это мне не надо. Реагирую как могу.

P.S. А код-таки увидеть хотелось бы .
Именно.



Офлайн

#10 Окт. 30, 2009 10:35:00

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

file.name в разных версиях питона?

pioner
Надо для загрузки файла на сервер через веб-форму не читая содержимого, а делать копию в другом месте для версии питона не выше 2.3..
т.е. копировать файл с помошью copy().
Это я читал. Мне непонятно. Хотите чтобы я вам помог - покажите код, чтобы воспроизвести ситуацию. Это форум программистов, здесь так принято.

Я могу назадавать вопросов по тому, что вы написали, но это будет дольше и может окончится ничем. Поэтому не буду.
Самый простой вариант - код, описывающий проблему. Вам самому будет полезно увидеть проблему, кстати.
Не бойтесь, это не больно :)



Отредактировано (Окт. 30, 2009 10:38:58)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version