Search code examples
pythonimagemagickimagemagick-convert

print imagemagick convert output to browser


I have the following code:

import subprocess
convertargs = ['convert', 'image1.tif', 'img2.tif', 'pdf:-']
print "Content-type: application/pdf\r\n\r\n"

pdf = subprocess.Popen(convertargs, stdout=subprocess.PIPE)
pdf, error = pdf.communicate()

print pdf

It's supposed to take convertargs, use imagemagick's convert to convert the images into a pdf.

I know this works because when I run the following at the shell:

./pdf.py > test.pdf

it creates for me a neat little PDF with the correct images. It does not, however, work when I go to www.myhost.com/pdf.py. And I cannot figure out why. Here's what my apache error log says:

Traceback (most recent call last):: /Library/WebServer/Documents/pdf.py
   File "/Library/WebServer/Documents/pdf.py", line 59, in <module>: /Library/WebServer/Documents/pdf.py
     pdf = subprocess.Popen(convertargs, stdout=subprocess.PIPE): /Library/WebServer/Documents/pdf.py
   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__: /Library/WebServer/Documents/pdf.py
     errread, errwrite): /Library/WebServer/Documents/pdf.py
   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child: /Library/WebServer/Documents/pdf.py
     raise child_exception: /Library/WebServer/Documents/pdf.py
OSError: [Errno 2] No such file or directory: /Library/WebServer/Documents/pdf.py

Solution

  • subprocess.Popen can't find convert, probably because the webserver uses a different $PATH. Try feeding it the full path to convert instead of just convert.