2016-01-11 1 views
0

J'ai essayé d'exécuter matplotlib sur des scripts CGI avec peu de succès. J'utilise Python3.5.Utilisation de matplotlib en Python 3 CGI

La plupart des références que j'ai trouvées en ligne montrent des fonctionnalités pour Python2.x.

#!/usr/bin/python 
import os,sys 
import cgi 
import cgitb 
cgitb.enable() 

import matplotlib 
import matplotlib.pyplot as plt 
import pylab 

matplotlib.use('Agg') 

plt.figure() 
plt.plot([1,2,3]) 

import io 
imgData = io.BytesIO() 

pylab.savefig(imgData, format='png') 

imgData.seek(0) 

print("Content-type: image/png") 
print() 

print(imgData.read()) 

Je courais Apache 2.4.18 sur Arch Linux, et je reçois l'erreur suivante:

The server encountered an internal error and was unable to complete your request. 

Error message: 
End of script output before headers: index.py 

If you think this is a server error, please contact the webmaster. 

Mon script a toutes les autorisations nécessaires à l'exécution.

Toute aide sera appréciée. MISE À JOUR: J'ai déplacé matplotlib.use('Agg') juste en dessous de import matplotlib et maintenant il passe l'erreur d'en-tête du serveur. Le backend était déclaré plus tôt, donc la déclaration ci-dessus n'a aucun effet. Cependant, maintenant j'obtiens l'erreur:

The image 'http://localhost' cannot be displayed since it contains errors. 

Comment rendre des images correctement?

+0

Vous faites référence 'pylab' sans l'importer. – jpcgt

+0

Importé Pylab, toujours obtenir la même erreur. – doberoi96

+0

Alors que vous avez tout à fait raison, cela ne semble pas être le principal problème ici, car il ne fonctionne même pas en le changeant en 'image/png'. – doberoi96

Répondre

0

J'ai résolu mon problème.

Ce qui suit fonctionne pour moi:

#!/usr/bin/python 
import os,sys 
import cgi 
import cgitb 
cgitb.enable() 

import matplotlib 
matplotlib.use('Agg') 

os.environ['HOME'] = '/tmp' 

import matplotlib.pyplot as plt 

plt.plot([1,2,3]) 

print("Content-type: image/png") 
print() 

plt.savefig(sys.stdout, format='png')