Izengardjke
Авг. 7, 2011 13:32:52
Начал осваивать питон для создания веб-приложений. Написал простенький код:
import sys, os
sys.stdout.buffer.write(b'Content-type: text/html;charset=utf-8\n\n')
os.dup2(1, 2)
print('Hello')
сначала все работало нормально, но потом в idle начал вылетать traceback
Traceback (most recent call last):
File "Z:\home\pythonweb\www\main.py", line 2, in <module>
sys.stdout.buffer.write(b'Content-type: text/html;charset=utf-8\n\n')
AttributeError: buffer
На
ideone.com вроде нормально компилится:
http://ideone.com/kyypIПрошу помочь с проблемой.
print 'Content-type: text/html;charset=utf-8'
print
print 'Hello'
Это для Python 2x.
А что там за хрень такая,
buffer? Убрать к едрене фене!
А точно CGI нужно? Его использование сейчас крайняя редкость и мало чем оправдано (только ленью)?
..bw
Izengardjke
Авг. 7, 2011 13:56:39
bw
А что там за хрень такая, buffer? Убрать к едрене фене!
Хотелось бы хотя бы узнать, к чему такая ненависть к этой штуке. Консультировался с одним товарищем, у него работает прекрасно. На третьей версии, угу.
bw
А точно CGI нужно?
Точно.
> к чему такая ненависть к этой штуке
Ну тут пусть ещё умные дядьки подойдут и поправят меня. Но дело примерно так обстоит; sys.stdout обязан реализовывать файлоподобный объект, в данном случае (выход, т.е. запись) это методы: write, и опционально flush и close (в виде заглушек?); заглушек, потому что клиентский код не должен их использовать (по нормальному). sys.stdout может быть заменён своим объектом, если он выполняет это требование (файлоподобие). buffer это какая-то особенность реализации, не являющаяся стандартом (?) и значит надежды на неё никакой, от среды к среде и от версии к версии среды, эта штука не только может появляться/исчезать, но и смысл и механизм её работы может меняться.
В данном случае, в одной среде эта штука есть и почему-то работает, а вот в IDLE её нет (а с какой собственно).
Так что предлагаю вырвать глаз тому кто посоветовал обращаться к нестандартным плюшкам некой среды (некой реализации sys.stdout).
p.s. Если не устраивает print, делаем через sys.stdout.write; print один хрен всё в этот stdout посылает.
..bw
Isem
Авг. 7, 2011 15:24:05
bw
Ну тут пусть …
Там далее все ‘?’ заменить на ‘!’ и все норм.