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/000005512/@@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

Reply via email to