conn = TorCtl.connect()
conn.sendAndRecv('signal newnym\r\n')
четверг, 25 августа 2011 г.
Использование TOR'а в pycurl
Писать много неохота. Поэтому коротенечко: нужно установить Vidalia Bundle. Затем модуль для Python - TorCtl. Затем проксей курлу указываем 127.0.0.1:9050 с типом Socks5. Всё, таким образом мы лазим серферим через какую-то проксю тора. Для смены этой прокси нам надо приконнектиться к тору и сбросить соединение с помощью модуля TorCtl.
суббота, 21 мая 2011 г.
Динамический импорт модуля.
Нужно было реализовать что-то типа плагинов: есть скрипт, представляющий из себя основу, и набор модулей для этой основы, для разных сервисов. То есть появился новый сервис - написал модуль, закинул в папку к скрипту - всё работает. Делается это довольно просто с помощью функции __import__:
module = "common_module" // название файла модуля
dyn_module = __import__(module)
Class = dyn_module.Dyn_Class // Dyn_Class - класс из модуля
суббота, 19 марта 2011 г.
Segmentation fault при использовании pycurl в Linux.
Написал клиенту простейший скрипт с использованием pycurl (я его всегда, кстати, использую), который состоит буквально из одного get-запроса, а при использовании этого скрипта под Linux, начала периодически валиться ошибка Segmentation fault и обрывать работу скрипта. Как выяснилось надо было вставить следующий кусочек кода, чтобы этого не происходило:
Пока не пробовал, но чтобы не забыть решил записать.
import sys
import pycurl
try:
import signal
from signal import SIGPIPE, SIG_IGN
signal.signal(signal.SIGPIPE, signal.SIG_IGN)
except ImportError:
pass
Пока не пробовал, но чтобы не забыть решил записать.
воскресенье, 13 марта 2011 г.
Использование __setattr_.
Очень часто использую файл настроек для скрипта посредством модуля ConfigParser. И как-то немножко поднадоело писать в несколько строк каждый раз:
Короче, захотел я, чтобы доступ к настройкам выглядел примерно так: ns1 = config.Domains['ns1'], когда надо обратился к ней, вне зависимости от того, сколько настроек в файле. Самая хитрость - это сделать свойством класса секцию файла настроек. Именно для этого нужна функция __setattr__. Вот так у меня всё в итоге получилось:
Используется это вот так:
Ну и сам файл настроек settings.cfg:
key = config.get("Basic","Key")
ns1 = config.get("Domains","NS1")
ns2 = config.get("Domains","NS2")
Короче, захотел я, чтобы доступ к настройкам выглядел примерно так: ns1 = config.Domains['ns1'], когда надо обратился к ней, вне зависимости от того, сколько настроек в файле. Самая хитрость - это сделать свойством класса секцию файла настроек. Именно для этого нужна функция __setattr__. Вот так у меня всё в итоге получилось:
class ConfigDict(object):
def __init__(self,path):
config = ConfigParser.RawConfigParser()
config.read(path)
for section in config.sections():
dct = {}
for option in config.options(section):
dct[option] = config.get(section,option)
self.__setattr__(section,dct)
Используется это вот так:
def main():
conf = ConfigDict("settings.cfg")
threads = conf.Basic['threads']
ns1 = conf.Domains['ns1']
if __name__ == '__main__':
main()
Ну и сам файл настроек settings.cfg:
[Basic]
THREADS = 1 ; потоки
[Domains]
NS1 = ns1.0adz.com
воскресенье, 14 ноября 2010 г.
Работаем с ftp через curl.
Подробной статьи для чайников я не нагуглил, даже на php, а ftp-uploader написать было необходимо. Поэтому приведу куски кода, которые мне помогли. Во-первых, нам надо залогиниться, юзаем опцию:
Во-вторых нам надо заливать файлы, делается это так:
В-третьих, нам надо создавать папки, а для этого нужно юзать команды ftp. Делается это так:
Пока всё, этого мне хватило, чтобы написать uploader. Пришлось немного попариться при создании вложенных папок, но вроде всё работает=) Прокси юзать также как и для http.
# userpwd = "login:parol"
curl.setopt(pycurl.USERPWD,userpwd)
Во-вторых нам надо заливать файлы, делается это так:
size = os.path.getsize(path)
fp = open(path,"rb")
# url = ftp://ftp.host.com/directory/file.txt
curl.setopt(pycurl.URL,url)
curl.setopt(pycurl.UPLOAD,1)
curl.setopt(pycurl.INFILE,fp)
curl.setopt(pycurl.INFILESIZE,size)
curl.perform()
В-третьих, нам надо создавать папки, а для этого нужно юзать команды ftp. Делается это так:
quote = "MKD {0}".format(folder)
curl.setopt(pycurl.URL,host)
curl.setopt(pycurl.POSTQUOTE,[quote])
curl.setopt(pycurl.UPLOAD,0)
curl.perform()
Пока всё, этого мне хватило, чтобы написать uploader. Пришлось немного попариться при создании вложенных папок, но вроде всё работает=) Прокси юзать также как и для http.
пятница, 6 августа 2010 г.
Переход на python 2.7?
На форуме дали ссылку на популярные модули для Питона, причем как для 2.6, так и 2.7. Все модули в виде exe-файлов, не надо набирать в консоли setup.py install и тому подобное. Сама ссылка очень порадовала, все необходимые мне модули там есть: pycurl, mechanize(ClientForm), Pil, и т.д.; и заставила задуматься о переходе на версию 2.7.
понедельник, 14 июня 2010 г.
Пути к файлам
# добавление папки в которой искать модули
sys.path.append(path)
# определение директории файла
os.path.dirname(path)
# смена рабочей директории
os.chdir(directory)
# переменная, в которой хранится путь до текущего скрипта
__file__
# делаем, чтобы все относительные пути
# вычислялись относительно пути до скрипта
os.chdir(os.path.dirname(__file__))
Подписаться на:
Сообщения (Atom)