Пересылка результатов обработки по FTP

Архив WebclubТехнологии2008

Публикация прежнего Webclub · 2008 год. Примеры и сведения сохранены в историческом контексте.

Итак, мы обработали клиентский запрос и в результате получили несколько переменных с интересующей нас информацией.

Удобно записать эти переменные в какой-нибудь файл, который затем легко можно будет обработать, например в csv. Далее его нужно заархивировать для уменьшения траффика и передать по FTP на наш локальный SQL сервер для последующей обработки. Для записи строки в csv файл добавляем:

csv.write('%s;%s;%s;%s;%s;%s;%s;%s;%s;%s\n' % (ip, host, date, time, request, status, bytes, referer, browser, country))

(подразумевается, что csv-файловый объект, открытый на запись)

 

Для копирования файла по протоколу FTP используем модуль ftplib. Так как объем данных может быть очень большим, заархивируем файл:


import os

command = 'bzip2 -z log.csv'
os.system(command)

Затем создаем соединение с FTP сервером и передаем файл:


ftp = FTP('ftp.myhost.ru', 'oartemov', 'secret')
ftp.set_pasv(1)
ftp.cwd('/export')
ftp_command = 'STOR log.csv.bz2'
ftp.storbinary(ftp_command, open('log.csv.bz2'))
ftp.quit()

Удаляем ненужный архив:


os.unlink('log.csv.bz2')

В примере описывается достаточно экзотический случай, когда FTP сервер находится внутри локальной сети, а веб-сервер, стоящий у провайдера, выступает в роли клиента. Обычно же FTP сервер установлен на том же компьютере, что и веб-сервер, поэтому скрипт необходимо запускать с компьютера, находящегося в локальной сети и вместо метода storbinary() использовать retrbinary(). Можно код, ответственный за получение данных по FTP, разместить вначале скрипта, помещающего данные в СУБД.

Ещё из архива

Архив клуба
веб-разработчиков

HTML, CSS, программирование и история интернета. Публикации прежнего Webclub по своим адресам.

Открыть архив
Сайт на ноутбуке и телефоне