Форум сайта python.su
Задача: мне нужно под сервером Apache запускать скрипт, который при помощи средств библиотеки matplotlib выводил бы какой-либо график.
Скрипт написан и работае сам по себе без проблем:
Появляется новое окно с прорисованным графикомю
Текст скрипта matplot.py:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.text as text
def main():
a = np.arange(0,3,.02)
b = np.arange(0,3,.02)
c = np.exp(a)
d = c
fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot(a,c,'k–',a,d,'k:',a,c+d,'k')
plt.legend(('Model length', ‘Data length’, ‘Total message length’),
‘upper center’, shadow=True)
plt.ylim()
plt.grid(False)
plt.xlabel('Model complexity —>')
plt.ylabel('Message length —>')
plt.title('Minimum Message Length')
# match on arbitrary function
def myfunc(x):
return hasattr(x, ‘set_color’) and not hasattr(x, ‘set_facecolor’)
for o in fig.findobj(myfunc):
o.set_color('blue')
# match on class instances
for o in fig.findobj(text.Text):
o.set_fontstyle('italic')
plt.show()
if __name__=='__main__':
main()
Apache и Python соединяю при помощи mop_python.
Написал html-страницу:
<html>
<p>
<form action=“matplot.py/main” method=“POST” target=_new>
<input type=“submit”>
</form>
</html>
Запускаю browser (Maxthon):
http://localhost/
Появляется моя html-страничка с кнопкой. Жму кнопку - появляется новая вкладка Maxthon (target=_new), Maxthon делает вид, что что-то долго и нудно грузит и всё! Моё окно с графиком не прорисовывается.
Помогите!!!
Офлайн
Попробуй сохранить график как изображение и уже его подгружать на страницу.
Офлайн
Сделал так:
from matplotlib.mlab import normpdf
import matplotlib.numerix as nx
import pylab as p
def main(req):
x = nx.arange(-4, 4, 0.01)
y = normpdf(x, 0, 1) # unit normal
p.plot(x,y, color='red', lw=2)
p.savefig('1.png')
return “”“ <html>
<p><img src=”/1.png“>
</html>
”“”
main(1)
То есть скрипт с функцией, которая рисует простейший график и сохраняет его в формате .png => p.save('1.png').
Функция возвращает <html> теги, для загрузки только что созданной картинки.
Проблема:
Когда запускаю скрипт просто интерпретатором python, скрипт срабатывает корректно, сохраняет нужный файл.
Но при обращении через browser картинка .png не создаётся. Соответственно появляется html-страница с крестиком вместо картинки!
Далее попробовал ещё проще:
def main(req):
f=open('1.txt', ‘w’)
f.write('AAA')
f.close()
return “”“ <html>
<p><img src=”/1.png“>
</html>
”“”
main(1)
Опять же, при запуске через python всё работает, а через apache - файл не создаётся!!!
Help!!!
Офлайн
Думаю стоит задать абсолютный путь к картинке.
Офлайн
Да, абсолютно точно. Спасибо за совет, всё заработало!!!
Офлайн