From: Simon H. <sim...@jp...> - 2005-03-19 18:31:22
|
John, I have reduced the python script to 4 lines which no longer includes matplotlib but it still does not work (see below). I have tried many permutations - none work. If you can get this to work, under Apache-windows. I would really appreciate knowing how. This capability would be useful for displaying images from matplotlib. #!d:/apps/Python23/python.exe fp = open('tmp.png','rb') print "Content-type: image/png\n" print fp.read() fp.close() Tthe script generates is: The image “http://shook-m2/cgi-bin/plot.py” cannot be displayed, because it contains errors. plot.py is the name of the script, tmp.png is a png in the cgi-bin directory. I am using: Python 2.3 (Enthought version) Apache 2.0.53 Windows XP Sp2 The script is in cgi-bin. Other python scripts work fine e.g. hello world. Cheers, Simon John Hunter wrote: >>>>>>"Simon" == Simon Hook <sim...@jp...> writes: >>>>>> >>>>>> > > Simon> Hi, The code below when run from a file in the cgi-bin > Simon> directory should generate a plot but it does not work: > >It would help to have more information. What do you mean "does not >work"? Are there any errors displayed to the terminal or apache >logs. I know people have used mpl with apache, but it can be a little >tricky to get all the data paths set up properly. > >matplotlib uses a couple of environment variables to find it's data >and store cache information. For example, if your fonts and >.matplotlibrc are in a nonstandard place, you need to set the env var >MATPLOTLIBDATA to point to them. Also, mpl tries to create a cache >file .ttffont.cache in your HOME dir by default, and in an apache >config HOME may not exist or may not be writable. If there is no >HOME, matplotlib will fall back on the MATPLOTLIBDATA dir, so make >sure env var is set, that it points to the directory that contains >Vera.ttf and the other mpl fonts, and that it is writable by the user >under which apache runs. > >If you get this to work, please write a HOWTO and submit it to the list. > > > Simon> #!d:/apps/Python23/python > > Simon> import sys import matplotlib matplotlib.use('Agg') from > Simon> pylab import * > > Simon> plot([1,2,3,4]) > > Simon> #print "Content-type: text/html\n\n" #print "<html>Hello > Simon> world!</html>" > > Simon> print "Content-type: image/png\n\n" > Simon> print savefig(sys.stdout) > >This looks wrong. Doing > >print savefig(sys.stdout) > >will also print the return value of savefig, which is None I believe. >I think you just want > >savefig(sys.stdout) > >But I can't vouch for the overall approach (setting the content type >and then dumping in a binary stream of the png). It may be correct, >but I haven't used it. Somehow I would expect the stream to be mime >or base64 encoded in an ascii file. > > Simon> However, it does not work and I am really struggling to get > Simon> matplotlib to generate a plot dynamically in a > Simon> cgi-script. If anyone has done this successfully I would > Simon> really appreciate some help or a simple example. I am using > Simon> Windows XP and Apache 2.0.53. > >Hope this helps a little -- let us know if you have any more details >on the problem you are experiencing or if you make any progress. > >JDH > > |