Архив автора: admin

Python 101: Загрузка файла при помощи ftplib (Пароль)

Есть несколько способов загрузки файла из интернета при помощи Python. Одним из самых популярных способов является подключение к FTP серверу и скачивание файла. Этим мы и сейчас займёмся. Всё, что нам понадобится — стандартная установка Python. В неё включена библиотека ftplib, которой нам вполне хватит.

Скачиваем!

Скачать файл очень просто:
# ftp-ex.py
 
import os
from ftplib import FTP
 
ftp = FTP("www.myWebsite.com", "USERNAME", "PASSWORD")
ftp.login()
ftp.retrlines("LIST")
 
ftp.cwd("folderOne")
ftp.cwd("subFolder") # или ftp.cwd("folderOne/subFolder")
 
listing = []
ftp.retrlines("LIST", listing.append)
words = listing[0].split(None, 8)
filename = words[-1].lstrip()
 
# скачиваем файл
local_filename = os.path.join(r"c:myfolder", filename)
lf = open(local_filename, "wb")
ftp.retrbinary("RETR " + filename, lf.write, 8*1024)
lf.close()
Давайте разбираться. Во-первых, нам надо подключиться к FTP серверу, так что необходимо передать URL сервера, логин и пароль. Если же Вы используете анонимный FTP сервер — то последние два аргумента можно опустить. Команда retrlines(“LIST”) выдаёт листинг папки. Команда cwd изменяет рабочую папку (“change working directory”), которую Вы используете для перехода в нужную для Вас папку. В следующей части показано как достаточно глупым способом получить имя файла. Вы можете использовать os.path.basename для тех же целей. Последняя часть показывает, собственно, как скачать файл. Обратите внимание, что файл открывается в режиме “wb” (двоичная запись). “8*1024″ — размер блоков для загрузки, хотя Python достаточно умён, чтобы выбрать подходящий размер.

Обратите внимание: Эта статья основана на документации Python для модуля ftplib и этот скрипт можно найти в папке с установленным Python: Tools/scripts/ftpmirror.py.

Домашнее чтение

Автор: Ishayahu Lastov

chntpw — сбрасываем пароль Windows из ubuntu (linux)

Попался в руки ноут, ну который совсем не хотел работать. Надо было сбросить пароль, который забыли 😉 , избавиться от winlock. Причем сделать простую переустановку отказались по ряду личных причин. Первый осмотр компьютера показал, что загружаться с него крайне не желательно. На помощь пришла Ubuntu и пакет chntpw. Для сброса пароля был записан liveCD Ubunt. Читать

Bumblebee — технологии NVIDIA Optimus на ноутбуках c двумя видеокартами

Поиски решения для адекватной работы compiz меня привели к Bumblebee. Проект Bumblebee нацелен на поддержку технологии NVIDIA Optimus на ноутбуках с операционными системами GNU/Linux. Используя Bumblebee вы можете дать команду видеокарте NVIDIA заняться процессом обработки изображения, которое потом будет выведено через карту Intel.

Читать

Настраиваем Unity в Ubuntu

MyUnity – небольшая утилита позволяющая пользователям настроить различные компоненты Unity такие, как шрифты, темы, Dash, панель Unity и ещё многое другое.

Читать

Светящийся террариум

Светящийся террариум

В этом необычном уроке будем делать светящийся террариум своими руками с птицей внутри. Эта декоративная банка своими руками способна украсить совершенно любой интерьер, а не только детскую.

Светящийся террариум

Читать

Таймеры высокого разрешения Linux C/C++

В операционной системе Linux помимо обычных задержек(sleep) и таймеров, реализованы таймеры высокого разрешения. Таймер и задержки высокого разрешения позволяет измерять временные промежутки с точностью до наносекунд, а так же позволяют приложения «засыпать» на непродолжительное время(в зависимости от конфигурации системы) соизмеримое с несколькими микросекундами.


//===============================================================
// Name : HiTimer.c
// Author : D.Falko
// Version : 1.0
// Description : High Resolution timer test
//===============================================================
 
 
#include
#include
#include
#include
#include
#include
 
 
int main(int argc, char *argv[])
{
if(0 == geteuid()) // приложение должно быть запущенно с правами суперпользователя
{
struct sched_param sp;
memset(&sp, 0, sizeof(sp));
sp.__sched_priority = sched_get_priority_max(SCHED_FIFO);
sched_setscheduler(0, SCHED_FIFO, &sp);
mlockall(MCL_CURRENT | MCL_FUTURE);
}
else
{
printf("Not running with superuser rigthsn");
exit(1);
}
if(argc < 3)
{
printf("Using: HiTimer iterations delayn");
exit(1);
}
 
int iter = atoi(argv[1]);
int delay = atoi(argv[2]);
 
int i=0;
struct timespec tS, startT, stopT;
 
clock_getres(CLOCK_MONOTONIC, &tS); // узнаем разрешение таймера
printf("Timer res: %ld sec, %ld nsecn", tS.tv_sec, tS.tv_nsec);
 
 
struct timespec time;
clock_gettime(CLOCK_MONOTONIC, &startT); // засекаем время начала теста
 
while(i<iter)
{ // повторяем iter раз задержку delay
i++;
clock_gett ime(CLOCK_MONOTONIC, &time); получаем актуальное время
time.tv_nsec+=delay; // добавляем требуемую задержку
clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME,
&time, NULL); // засыпаем
}
clock_gettime(CLOCK_MONOTONIC, &stopT);
long int nsec=stopT.tv_sec*1000000000 + stopT.tv_nsec
-startT.tv_sec*1000000000 + startT.tv_nsec;

  // iter*delay должно примерно равняться nsec, узнаем погрешность задержек
printf("Number of iterations: %d timer value: %d nsecn",
iter, delay);
printf("Time elapsed: %ld nsecn", nsec);
 
 
return 0;
}
А теперь подробней о использованных компонентах.

Используемая структура времени определена в <sys/time.h> и выглядят следующим образом:

struct timespec {
long tv_sec; /* секунды */
long tv_nsec; /* наносекунды */
};
 
Далее мы узнаем и выводим на экран точность(разрешение) системных часов, при помощи функции:

int clock_getres(clockid_t clk_id, struct timespec *res);
в структуру struct timespec *res записывается разрешения, указанных в clockid_t clk_id часов.

clockid_t clk_id может быть:

CLOCK_REALTIME: часы реального времени, доступные всем процессам в системе. Часы измеряются в секундах и наносекундах с начала эпохи (то есть 00:00:00 1 января 1970 по Гринвичу). Точность 1/HZ секунд. 

CLOCK_MONOTONIC: время непрерывной работы ОС, доступное всем процессам. В Линукс оно измеряются  в секундах и наносекундах после загрузки ОС. Точность 1/HZ с. Время в этих часах не может быть изменено каким-либо процессом, по этому рек