Как удалить файл в python внутри контейнера докеров?

Код ниже является частью моего кода. На моей локальной машине все в порядке. Однако я развертываю свой код и внутри контейнера докеров, он дает ошибку «результат»: «[Errno 13] Отказано в доступе: путь». Что может быть решением для удаления в контейнере докеров? Пробовал os.remove() тоже, не получилось.

path = "/mypath/"
output = path + "myfile.pdf"

result_file = open(output, "w+b")

pisa_res = pisa.CreatePDF(
        source_html,               
        dest = result_file)

result_file.close()  

with open(output, "rb") as pdf_file:
    encoded_string = base64.b64encode(pdf_file.read())       

os.system(f"rm -rf {output}") 

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

Kroustou 18.12.2020 13:29

Это может помочь, также я бы порекомендовал прикрепить tmpfs к контейнеру или вашей папке /tmp, чтобы было проще управлять. stackoverflow.com/questions/42816048/…

Emin Mastizada 18.12.2020 13:33

Я не понимаю, почему вы сохраняете это в файле, а потом читаете - разве вы не можете сделать это без файла? В конце концов вы можете использовать io.BytesIO для создания файла в памяти без записи на диск. И тогда вам не придется его удалять.

furas 18.12.2020 13:58

@EminMastizada это не то, чего я хочу.

Elvin Jafarov 18.12.2020 14:06

@Kroustou я проверю

Elvin Jafarov 18.12.2020 14:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
716
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

я не знаю в чем проблема с этим файлом и как его удалить

но я бы использовал io.BytesIO для создания файла в памяти, а затем он не создает файл на диске, и его не нужно удалять

У меня нет pisa, чтобы проверить это, но это должно быть что-то вроде этого

import io

result_file = io.BytesIO()

pisa_res = pisa.CreatePDF(
        source_html,               
        dest=result_file)

result_file.seek(0) # move to the beginning of file to read it

encoded_string = base64.b64encode(result_file.read())

Модуль io является стандартным модулем, поэтому вам не нужно его устанавливать.

Спасибо, это сработало. Это лучший способ реализации.

Elvin Jafarov 18.12.2020 14:19

Другие вопросы по теме