Временный файл Python с модулями, которым требуется путь в виде строки

Недавно я обнаружил модуль tempfile, который позволяет легко создавать временные файлы, используемые вашей программой Python.
Однако при попытке использовать этот модуль я обнаружил проблему: большинство модулей Python, которые манипулируют или создавать файлы, используйте путь к файлу (в виде строки) в качестве входных данных от пользователя (или программиста).

Это означает, что такой код вызовет ошибку:

import tempfile

with tempfile.NamedTemporaryFile(suffix=".jpg") as tempfileimg:

    image = generate_random_image()
    save_image(image, tempfileimg)      # Type Error (expected path to file)
    upload_image_to_cloud(tempfileimg)  # Type Error (expected path to file)

    # In this example, both `save_image` and `upload_image_to_cloud` functions
    # expect to receive the path to the file and not the "opened file object".

Я попытался использовать tempfileimg.name, чтобы получить путь к временному файлу в виде строки, но поскольку временные файлы находятся в специальной папке на машине, запись файлов обычными методами вызовет ожидание:

PermissionError: [Errno 13] Permission denied: 'C:\\Users\\MyUserName\\AppData\\Local\\Temp\\tmpvq81yj2v.jpg'

Как я могу решить эту проблему?


person RealA10N    schedule 27.11.2020    source источник
comment
Не могли бы вы отредактировать свой вопрос, включив в него полный текст ошибки, возникающей при попытке использовать tempfileimg.name? Ошибка отказа в разрешении является странной.   -  person Josh Karpel    schedule 28.11.2020
comment
ты на винде?   -  person Lior Cohen    schedule 28.11.2020
comment
@LiorCohen Да, я использую Windows.   -  person RealA10N    schedule 28.11.2020
comment
@JoshKarpel Добавил к вопросу полную ошибку. Имейте в виду, что использование свойства name не приводит к возникновению исключения, но вызывает его при попытке открыть файл.   -  person RealA10N    schedule 28.11.2020
comment
Можете уточнить, что именно вы спрашиваете? Похоже, проблема заключается в несоответствии прав доступа к файлам, а не в получении пути к файлу. Независимо от того, как вы получите путь к временному файлу, если он недоступен для записи, то он недоступен для записи.   -  person MisterMiyagi    schedule 28.11.2020
comment
@MisterMiyagi Я могу записать во временный файл, используя метод write. Однако я не могу открыть файл извне и могу получить к нему доступ только с помощью экземпляра tempfile.   -  person RealA10N    schedule 28.11.2020
comment
Отвечает ли это на ваш вопрос? Временный файл Python с диспетчером контекста в Windows 10 приводит к PermissionError: [Errno 13]   -  person MisterMiyagi    schedule 28.11.2020
comment
Обратите внимание, что согласно документации для NamedTempFile: может ли имя использоваться для открыть файл во второй раз, пока именованный временный файл все еще открыт, зависит от платформы (его можно использовать в Unix; нельзя в Windows NT или более поздних версиях). Вы можете использовать неправильный инструмент для вашей задачи.   -  person MisterMiyagi    schedule 28.11.2020