Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 22, 2009 18:58:59

Boris-117_23
От:
Зарегистрирован: 2009-11-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+Apache+Matplotlib

Задача: мне нужно под сервером 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 делает вид, что что-то долго и нудно грузит и всё! Моё окно с графиком не прорисовывается.

Помогите!!!



Офлайн

#2 Ноя. 22, 2009 23:05:30

Syao
От:
Зарегистрирован: 2009-11-15
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+Apache+Matplotlib

Попробуй сохранить график как изображение и уже его подгружать на страницу.



Офлайн

#3 Ноя. 24, 2009 21:23:49

Boris-117_23
От:
Зарегистрирован: 2009-11-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+Apache+Matplotlib

Сделал так:

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!!!



Офлайн

#4 Ноя. 24, 2009 21:30:42

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Python+Apache+Matplotlib

Думаю стоит задать абсолютный путь к картинке.

Офлайн

#5 Ноя. 25, 2009 23:08:45

Boris-117_23
От:
Зарегистрирован: 2009-11-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Python+Apache+Matplotlib

Да, абсолютно точно. Спасибо за совет, всё заработало!!!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version