|

Monthy Python
Ramhak konung@ic.ru
Xakep, номер #017, стр. 017-026-4
Затем нужно сказать пару магических слов, чтобы браузер, в котором инетчик введет наш урл, понял, что именно мы ему собираемся отдавать - файл, html-файл, txt-файл или может вообще ничего. Для того чтобы сказать, что мы собираемся отдать ему html-файл, нужно вывести определенные строки с помощью print:
print "Content-type: text/html"
print
Затем нужно разобраться, какие параметры заданы в урле. Параметры передаются после "?" в виде "имя параметра=значение параметра". Каждый параметр отделяется от остальных амперсандом - "&". У нашего скрипта должен быть только один параметр - url, а равняться он должен адресу странички, которую будет обрабатывать скрипт. Несложная система реализуется на питоне в один присест. Чтобы разобраться со строками и текстом, нам понадобятся соответствующие функции. Самим ничего писать не придется - все уже сделано до нас, надо только подключить нужную библиотеку:
import string
Стоп! Что-то забыл... А! Ну конечно! Параметры - с ними тоже можно не возиться, а просто подключить соответствующую либу:
import cgi
Теперь можно и кодить (все необходимые комментарии прямо в тексте):
f = open("counter.dat", "r+") # откроем файл counter.dat для чтения и записи (параметр r+)
counter = string.atoi(f.readline()) # f.readline - считывает одну строку из файла
# а string.atoi переводит строку в число, которое можно
counter = counter + 1 # увеличить на единицу (счетчик, все-таки :)
f.seek(0, 0) # снова перейдем в начало файла
s = "%(counter)d;" % vars() # сделаем здесь небольшой трюк, о котором подробнее - чуть
# позже
f.write(s + "\n") # здесь s = значение счетчика, но s - это уже строка.
# к ней мы прибавляем "\n" - символ перевода на следующую # строчку
f.close() # закроем файл
# здесь мы уже знаем текущее значение счетчика - оно находится в counter и в s
# нужно выяснить, что за файл нужно обработать. Для этого воспользуемся функциями
# подключенной библиотеки-либы cgi
form = cgi.FieldStorage() # разобраться с параметрами
if form.has_key("url") and form["url"].value != "": # нужный параметр есть и он не пуст...
f = open(form["url"].value, "r") # откроем файл
lines = f.readlines() # прочтем его весь в список lines
f.close() # закроем файл
for index in range(len(lines)): # и в каждой строке
string.replace(lines[index], "%%%counter%%%", s)
print s # заменим %%%counter%%% на значение
# счетчика и отдадим строку браузеру
Эти несколько строчек - все, что пришлось делать. Не пришлось даже разбираться (хотя было бы не плохо) :) в перло подобных "регулярных выражениях" (regular expression). Но это, как говорят, уже совсем другая история.
Все тело в волшебных пузырьках
Python ориентирован прежде всего на работу с консолью, поскольку задумывался он как Unix-приложение. Отсюда и все родственные с этой системой конструкции семантики (то есть правил написания программ). Но, надо признать, что те, кто потрудился в свое время над PYTHON, совершили мужественный поступок, решив оторвать его от Unix и постараться сделать его системонезависимым (чтобы он работал и под Windows, и под DOS, и под OS/2, и даже под QNX). Хотя впервые реализован PYTHON был на Маках. Неувязочка такая. (-: Уже позже были придуманы частичная компиляция (не в коды процессора, а в коды интерпретатора, который, естественно, обрабатывает их быстрее, чем "сырой" скрипт) и изготовление пакетных файлов, одна и та же версия которых может с успехом работать практически на любой платформе. Это, безусловно, большой плюс в пасть PYTHON. :) Тем более, что для win32 выпущен псевдокомпилятор - скрипт компилируется в транскоды (в собственный двоичный формат, придуманный автором питона, чтобы все программы, написанные на питоне, работали быстрее) и упаковывается в EXE-шник с интерпретатором. Получается небольшой исполняемый файл, который можно распространять отдельно, не ставя Python под каждую мастдайку.
Назад на стр. 017-026-3 Содержание Вперед на стр. 017-026-5
|