gpt4 book ai didi

python - Django/Python 使用 shell (os.system/Popen) 转换 PDF 在生产中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:08 24 4
gpt4 key购买 nike

我在 CLI 上使用 libreoffice 在 Django 中将一些文档转换为 PDF。

这是我的看法(也尝试过模型的保存方法):

outdir = '/'.join([settings.MEDIA_ROOT, 'pdf'])
command = ['libreoffice', '--headless', '--convert-to', 'pdf', '-outdir', outdir, form.instance.upload.path]
stdout, stderr = subprocess.Popen(command).communicate()

我还尝试了以下方法代替 subprocess.Popen:

os.system("libreoffice --headless --convert-to pdf --outdir %s %s" % (outdir, instance.upload.path))                                                         

然后我检查一下:

# quick check new file exists                                                                                                                                                
with open("%s/%s.pdf" % (outdir, os.path.splitext(instance.upload.name)[0])): pass

当我在网站上运行它们时根本不起作用——没有生成 PDF 文件。

事情是:这两种方法都有效在我的本地环境中以及从 $ python manage.py shell 调用它们所在的函数时都有效

问题仅在生产中。

  • Django 1.4
  • python 2.7.3
  • 服务器版本:Apache/2.2.22 (Ubuntu) 服务器构建:2012 年 2 月 13 日 01:51:50 (Rackspace)

请注意,我认为我可能会遇到此错误:Popen does not work anymore with apache/wsgi and python 2.7.2? ...

虽然 Graham 的工作如下(我将其添加到我的 apache2.conf )似乎没有改变任何东西。

WSGIApplicationGroup %{GLOBAL}

虽然我的系统管理技能不是很好,但我可能做错了,我完全被难住了,任何建议或其他尝试或变通方法的指示将不胜感激。

最佳答案

mod_wsgi 当从 apache2 进程产生时,不会有你在 shell 上定义的 $PATH,所以你应该通过subprocess.Popen libreoffice 二进制文件的绝对 路径名,即 /usr/bin/libreoffice,而不仅仅是它的文件名。

关于python - Django/Python 使用 shell (os.system/Popen) 转换 PDF 在生产中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13271254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com