首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >webapp2 -只读文件系统错误

webapp2 -只读文件系统错误
EN

Stack Overflow用户
提问于 2016-03-20 20:53:51
回答 2查看 2.2K关注 0票数 1

我正在使用Python (webapp2) & Jinja2开发Google应用程序,并试图使用报告室库创建一个PDF文件。

示例:

代码语言:javascript
复制
from reportlab.pdfgen import canvas

class pdf(webapp2.RequestHandler):
  def get(self):
    x = 50
    y = 750
    c = canvas.Canvas("file.pdf")
    c.drawString(x*5,y,"Output")
    c.line(x,y-10,x*11,y-10)
    c.save()

当我运行服务器时,我会得到以下错误:

代码语言:javascript
复制
raise IOError(errno.EROFS, 'Read-only file system', filename)
IOError: [Errno 30] Read-only file system: u'file.pdf'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-21 19:56:22

我用StringIO让它工作

代码语言:javascript
复制
from reportlab.pdfgen import canvas

# Import String IO which is a
# module that reads and writes a string buffer
# cStringIO is a faster version of StringIO
from cStringIO import StringIO

class pdf(webapp2.RequestHandler):
  def get(self):
    pdfFile = StringIO()

    x = 50
    y = 750
    c = canvas.Canvas(pdfFile)
    c.drawString(x*5,y,"Output")
    c.line(x,y-10,x*11,y-10)
    c.save()

    self.response.headers['content-type'] = 'application/pdf'
    self.response.headers['Content-Disposition'] = 'attachment; filename=file.pdf'
    self.response.out.write(pdfFile.getvalue())
票数 1
EN

Stack Overflow用户

发布于 2016-03-20 21:13:12

您不能写到appengine文件系统--毕竟,您有多台机器(而且您不能一直使用相同的机器),您会写到哪台机器的文件系统呢?

但是,看起来reportlab画布接受一个打开的文件对象。我不能保证这会起作用,但是您可以尝试传递一个打开的类似文件的对象。例如io.BytesIO,甚至webapp2.Response.out

代码语言:javascript
复制
import io
class pdf(webapp2.RequestHandler):
  def get(self):
    x = 50
    y = 750
    c = canvas.Canvas(self.response.out)
    c.drawString(x*5,y,"Output")
    c.line(x,y-10,x*11,y-10)
    c.save()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36119453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档