Django / Python使用shell(os.system / Popen)转换PDF,而不是在生产中工作

前端之家收集整理的这篇文章主要介绍了Django / Python使用shell(os.system / Popen)转换PDF,而不是在生产中工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在CLI上使用libreoffice将一些文档转换为Django中的PDF.

这在我看来(也在模型的save方法中尝试过):

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?

虽然格雷厄姆的工作方式如下(我将其添加到我的apache2.conf中)似乎没有改变任何东西.

WSGIApplicationGroup %{GLOBAL}

我的系统管理员技能虽然不是很好,但我可能做错了,而且我完全难过,任何有关其他事情的建议或指示都可以尝试或解决.

解决方法

从apache2进程生成的mod_wsgi将不会在shell上定义$PATH,因此您应该传递subprocess.Popen libreoffice二进制文件绝对路径名,即/usr/bin/libreoffice,而不仅仅是文件名.
原文链接:https://www.f2er.com/python/446206.html

猜你在找的Python相关文章