Архив Март, 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
Пока не пробовал, но чтобы не забыть решил записать.
Использование __setattr_.
комментарии: 4
Очень часто использую файл настроек для скрипта посредством модуля ConfigParser. И как-то немножко поднадоело писать в несколько строк каждый раз:
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