Hi.
i have a utility that generates thumbnails for objects that can be displayed
as an image (faxes).
the part that generates the thumbnail :
def generate_thumbnail(self, data):
Return a smaller view of the data stream
# if data stream is a djvu file, convert it to ps before
thumbnailing.
magic = getUtility(IFileMagic)
mimetype = magic.getMimeType(data)
if mimetype == image/x.djvu:
(stdin, stdout) = os.popen2(djvups - -)
stdin.write(data)
stdin.close()
data = stdout.read()
stdout.close()
# Explenation of convert command line attributes :
# -resize 150 : resize, while keeping aspect ratio, to a width
of 150 pixels
# -[1] : input file in stdin (-) to extract only frame 1:
-[1]).
#format detected automatically from data stream
# png:- : output file on stdout (-) in png (png:) format
(stdin, stdout) = os.popen2(convert -quiet -resize 150 -
png:-)
stdin.write(data)
stdin.close()
thumbnail = stdout.read()
stdout.close()
return thumbnail
this utility is used by a view that displays a grid of a few thumbnails.
when the view is loaded, several thumbnails are generated at once. (calls from
the img tags to an /@@thumbnail view on the obect)
some thumbnail make it through (very few), the rest fail with :
2007-01-30T21:54:06 ERROR SiteError
http://moobox:8080/2007/inbox/05512/@@thumbnail
Traceback (most recent call last):
File /usr/lib/zope-3.3.0/lib/python/zope/publisher/publish.py, line 133,
in publish
result = publication.callObject(request, obj)
File /usr/lib/zope-3.3.0/lib/python/zope/app/publication/zopepublication.py,
line 161, in callObject
return mapply(ob, request.getPositionalArguments(), request)
File /usr/lib/zope-3.3.0/lib/python/zope/publisher/publish.py, line 108,
in mapply
return debug_call(obj, args)
- __traceback_info__: bound method ThumbnailView.__call__ of
zope.app.publisher.browser.viewmeta.ThumbnailView object at 0xb4f1c20c
File /usr/lib/zope-3.3.0/lib/python/zope/publisher/publish.py, line 114,
in debug_call
return obj(*args)
File /var/lib/zope/office/lib/python/base/visual/browser.py, line 59, in
__call__
tf.write(self.data)
File /var/lib/zope/office/lib/python/base/thumbnail/browser/thumbnail.py,
line 41, in data
return getAdapter(self.context, IVisual, name=thumbnail).data
File /var/lib/zope/office/lib/python/base/thumbnail/thumbnail.py, line 21,
in data
thumbnail = tg.get_thumbnail(self.context)
File /var/lib/zope/office/lib/python/base/thumbnail/utility.py, line 80,
in get_thumbnail
thumb.image = StringIO(
File /var/lib/zope/office/lib/python/base/thumbnail/utility.py, line 67,
in generate_thumbnail
thumbnail = stdout.read()
IOError: [Errno 4] Interrupted system call
i read somewhere that os.popen2 is not friendly towards twisted framework, and
that twisted.internet.reactor.spawnProcess or
twisted.internet.process.Process should be used.
i can't undersnad what format the parameter childfds should look like when
calling those. could somebody show me the equivalent of (stdin, stdout) =
os.popen2() ?
___
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users