Форум сайта python.su
6
Ну так вам и говорят: IndentationError
Офлайн
truporez, погуглил, данная ошибка связана с отступами в коде. На мой неопытный взгляд все отступы расставлены правильно. Вот код write.cgi целиком:
#!/usr/bin/python #-*- coding:utf-8 -*- import cgi form = cgi.FieldStorage() print 'Content-Type: text/html; charset=utf-8' print '' print '<html>' print '' print ' <head>' print '' print ' <style type="text/css">' print '' print ' body' print ' {' print ' background-color: #FFFAE1;' print ' }' print '' print ' </style>' print '' print ' </head>' print '' print ' <body>' if ('surname' and 'firstname' and 'patronymic' and 'address' and 'phonenum') in form: surname = cgi.escape(form['surname'].value) firstname = cgi.escape(form['firstname'].value) patronymic = cgi.escape(form['patronymic'].value) address = cgi.escape(form['address'].value) phone = cgi.escape(form['phonenum'].value) info = surname + ' ' + firstname + ' ' + patronymic + ' ' + address + ' ' + phone try: f = open ('phonebook.dat', 'a+') f.writelines (info) f.close () print ' <script type="application/javascript" src="/files/js/continueToAdd.js">' print ' </script>' except IOError: print ' <script type="application/javascript" src="/files/js/failedToAccessFile.js">' print ' </script>' print ' </body>' print '' print '</html>'

Офлайн
6
Хм, выглядит нормально. Убедитесь, что используете для отступов либо табы либо пробелы, но не вместе. Обратите внимание на переводы строк, нет-ли ералаша там.
Ну и если ничего непоможет, добавьте пустую в конце файла.
Офлайн
truporez, попробовал добавить пустую строку и в сам скрипт, и в файл для сохранения данных - безрезультатно. Скопировал файл phonebook.dat в каталог /tmp - IOError не возникает, обрабатывается фрагмент:
print ' <script type="application/javascript" src="/files/js/continueToAdd.js">' print ' </script>'

Офлайн
6
До записи дело не доходит. По мнению интерпретатора у Вас сам файл содержит ошибки форматирования. Киньте, что-ли, мне его в ящик, в архиве. Попробую помочь.
Либо заменить сами все табы на пробелы и возвраты каретки приведите к одному виду. Других идей нет.
Офлайн
truporez, огромное спасибо! Высылаю Вам скрипт write.cgi. Вообще, это только часть работы, которая должна привести к результату: создать мини-сайт с функциями вывода, добавления, редактирования и удаления информации. Сейчас работаю над главной страницей, а к работе над добавлением информации вернусь утром.

Отредактировано ulfur (Янв. 12, 2013 20:12:00)
Офлайн
6
Вот и спалились, молодой человек. :)
У вас там и пробелы и табы и табы с пробелами в одной строке.
Офлайн
33
ulfurВключите в редакторе отображение непечатных символов и все увидите сами.
По отступам: использую только табы.
Офлайн
truporez, доброго времени суток! Запустил скрипт с Вашими исправлениями - та же история, при указании пути /tmp/phonebook.dat сообщается об успешной записи, при указании пути /var/www/html/files/txt/phonebook.dat - об ошибке, в обоих случаях файл остается пустым, хотя права на запись в него предоставлены всем. Вот фрагменты логов апача:
access_log
127.0.0.1 - - [13/Jan/2013:11:29:33 +0700] "POST /cgi-bin/write.cgi HTTP/1.1" 500 609 "http://localhost/cgi-bin/add.cgi" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
127.0.0.1 - - [13/Jan/2013:11:29:33 +0700] "GET /favicon.ico HTTP/1.1" 404 284 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] File ", referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] /var/www/cgi-bin/write.cgi, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] ", line , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] 41, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] print ' </body>', referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] ^, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] IndentationError, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] : , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] expected an indented block, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] Premature end of script headers: write.cgi, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] File does not exist: /var/www/html/favicon.ico
truporezЕсли речь о табах в кавычках - то они используются исключительно для того, чтобы генерируемый HTML при просмотре исходного кода нормально читался (для каждого тега, вложенного в другой, отступ увеличивается; теги, вложенные в один тег, имеют одинаковый отступ).
У вас там и пробелы и табы и табы с пробелами в одной строке.

Офлайн
6
Теперь у вас такая-же ошибка в add.cgi. Речь о табах и пробелах в исходном коде, а не строках. Исправляйте, как вам посоветовали, включив отображение непечатных символов.
Отредактировано truporez (Янв. 13, 2013 08:12:58)
Офлайн