【问题标题】:How to delete file in python inside docker container?如何在docker容器内的python中删除文件?
【发布时间】:2020-12-18 12:25:58
【问题描述】:

下面的代码是我的代码的一部分。在我的本地机器上,一切都很好。但是,我在 docker 容器中部署了我的代码,它给出了错误 "result": "[Errno 13] Permission denied: path"。还有什么可以在 docker 容器中删除的解决方案?我也试过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}") 

【问题讨论】:

  • 检查执行此代码的用户是否有权删除此文件。听起来像是权限问题。
  • 这可能会有所帮助,此外,我建议将 tmpfs 附加到容器或 /tmp 文件夹,这样更易​​于管理。 stackoverflow.com/questions/42816048/…
  • 我不明白你为什么将它保存在文件中,然后再阅读它——你不能没有文件吗?最终您可以使用io.BytesIO 在内存中创建文件,而无需写入磁盘。然后你不必删除它。
  • @EminMastizada 这不是我想要的。
  • @Kroustou 我会检查的

标签: python python-3.x django django-rest-framework docker-compose


【解决方案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())

Module io 是标准模块,因此您不必安装它。

【讨论】:

  • 谢谢,它成功了。这是更好的实施方式。
猜你喜欢
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 2021-07-07
  • 2017-02-19
  • 2019-08-11
  • 2021-10-10
  • 2013-06-18
相关资源
最近更新 更多