Простите пожалуйста, я совершенно запутался о чём мы говорим. Перечитал ещё раз комментарий susl'а и понял что я вообще не про то говорил, отвечая на его вопрос… последствия 4х утра.
По порядочку. Я буду повествовать, а Вы поправите меня, где я начну ошибаться.
1) С комментарием susl'a, действительно плохо как-то вышло. Я стараюсь таких конструкций не использовать. После появления with statement в python 2.6 — правильной конструкцией будет являться:
With statement обеспечивает обязательное закрытие файла при любых, даже самых непредвиденных обстоятельствах.
2) Ему в ответ я нагородил огородов с main функцией. В неё я вынес запись данных из многострочечной переменной monitor в тестовый файл. Именно его мы будет вчитывать для тестов. Проблема оказалась в том, что если попытаться выполнить os.remove('test_mon'), где 'test_mon' — это path к тестовому файлу данных, и поставить эту функцию сразу за unittest.main(), то файл так и остаётся не удалённым после прохождения тестов. Может этот самый unittest.main() после своего выполнения останавливает внешний скрипт тоже. Поэтому только finally можно заставить что-то выполниться в любом случае. Есть конечно методы самого unittest модуля, например, которые выполняются сразу после исполнения какого-либо теста. Можно наверное удаления файла поручить последнему тесту в самом конце.
3) В readin_monitor(monitor) передаётся строка. monitor — это название файла, который потом отрывается дурацким способом (смотри пункт 1) в теле самой функции. Можно в функцию передавать указатель на файл, или это правильнее назвать файловым объектом. Кажется, именно так Вы советовали: readin_monitor(open(filename)). Но я до конца не понимаю что этим можно выиграть. Открываем файл в main — передаём функцию указатель. Кусок кода перетекает из тела функции в main. Я не вижу того, что Вы пытаетесь мне показать. Можно поподробнее пожалуйста?
Да, Вы правы. Действительно заработало. Может это были особенности python 2.5, что приходилось так изгаляться с global объявлениями.
Но в любом случае спасибо за наводку. Нужно будет ещё раз перечитать области видимости переменных.
Удаление файла сидит в файнале, иначе файл не удаляется. При этом не появляется никакой эксепшн… Не знаю в чём причина. Но с файнал стейтментом — работает.
Спасибо. Я прочитал об этих двух методах уже после публикации. Думал упомянуть их в статье, но не стал.
Я так понимаю эти методы так же работаю и со списком. При этом приблизительно будут сравниваться элементы списка. Так?
Т.к. переменные глобальные, то доступ к ним будет возможен из любого окружения.
Если их не объявить глобальными, то достучаться до них из тела функции можно будет только объявляя их внутри функции как nonlocal или опять таки global. Проще один раз это сделать во внешнем окружении.
Пока кинул статью в свой персональный блог. Не знаю достойна ли статейка блога про Питон.
Хотя как пример такого шаблона с OptionParser и UnitTest — может и ничего.
Мне показалось, или перевод действительно сильно отличается от оригинала. Я просто читаю оригинальную версию на английском, а вот тут лежит кусочек перевода на русский язык (7ая глава). Если внимательно присмотреться, то даже картинки как-то урезаны, переведены только частично — много текста просто выкинуто.
Пока существует только единственный русский перевод? Или это я такой удачливый — попал на не лучший экземпляр…
Вот за что люблю хабр, обязательно найдётся и третий и четвёртый вариант показать всем как можно лапухнуться (я про себя)…
Действительно работает. Спасибо, мил человек. Одной проблемой меньше.
Хотя я научился передавать команду сессии скрина, это тоже полезный навык для моих симуляций на блейдами. (это я опять просто так бурчу, что бы хоть как-то оправдаться =)
Если я правильно понял, то MPD удобно ставить на медиацентры и файловые хранилища, с которых потом можно проигрывать музыку на всю квартиру/дом/квартал (нужное подчеркнуть). А gui — это просто приложение для управлением этим демоном с любой удалённой машины. Я угадал?
Ой! «Avahi/Zeroconf support» а вот это особенно порадовало. Всё — проэкт на завтра, заводим свой трактор с блекджеком.
Про MPD рашье не знал — спасибо. Интересный проэкт. Только вот ГУЁв под него сразу найти не получилось. Может я не там ищу?
Ни у в оправдание хотелось бы ещё сказать, что rhythmbox обладает целым набором положительных черт. Он лёгок на подъём, система плагинов с вполне приличным функционалом, каталогизация и плейлисты, и, что не самое последнее, сносная работа с iPOD'ами.
А кто-нибудь в курсе как заставить vim работать в режиме vimdiff? Поясню — если открыты два окна бок-о-бок, то при прокрутке одного — скроллилось бы и второе? Точно знаю что можно так сделать, но не находил как. Подскажете?
Не принципиально конечно, сам только недавно заметил — кроме обычного поста на хабре, есть ещё и пост-перевод. Можно было под этим стилем оформить, хотя опять-таки, это сути не поменяет.
Спасибо за ролик. Давно хотел Феймана увидеть воочию.
Отличный дезайн, можно пользователю оставить выбор цвета фона. Слишком светлый (белый) фон будет меня, например, чуть-чуть напрягать. И ещё к скорости и проценту ошибок добавить третий пункт — процент напечатанного текста. Пока чуть не ясна идея в уроками — будет как в «Соло» (Владимир Владимирович Шахиджанян, не обращайте внимание) — т.е. линейное прохождение, или же на усмотрение пользователя, или любой текст… Тут можно многое придумать.
Я мог бы попробовать рассказать про Атлантическое побережье. Т.к. сам сейчас в Северной Каролине живу. Был и на Флориде, и в Пенсильвании. Обзорно написать что-то в двух предложениях сложно. Лучше задавайте вопросы конкретные — попробуем на пару с mrgall`ом ответить.
По порядочку. Я буду повествовать, а Вы поправите меня, где я начну ошибаться.
1) С комментарием susl'a, действительно плохо как-то вышло. Я стараюсь таких конструкций не использовать. После появления with statement в python 2.6 — правильной конструкцией будет являться:
With statement обеспечивает обязательное закрытие файла при любых, даже самых непредвиденных обстоятельствах.
2) Ему в ответ я нагородил огородов с main функцией. В неё я вынес запись данных из многострочечной переменной monitor в тестовый файл. Именно его мы будет вчитывать для тестов. Проблема оказалась в том, что если попытаться выполнить os.remove('test_mon'), где 'test_mon' — это path к тестовому файлу данных, и поставить эту функцию сразу за unittest.main(), то файл так и остаётся не удалённым после прохождения тестов. Может этот самый unittest.main() после своего выполнения останавливает внешний скрипт тоже. Поэтому только finally можно заставить что-то выполниться в любом случае. Есть конечно методы самого unittest модуля, например, которые выполняются сразу после исполнения какого-либо теста. Можно наверное удаления файла поручить последнему тесту в самом конце.
3) В readin_monitor(monitor) передаётся строка. monitor — это название файла, который потом отрывается дурацким способом (смотри пункт 1) в теле самой функции. Можно в функцию передавать указатель на файл, или это правильнее назвать файловым объектом. Кажется, именно так Вы советовали: readin_monitor(open(filename)). Но я до конца не понимаю что этим можно выиграть. Открываем файл в main — передаём функцию указатель. Кусок кода перетекает из тела функции в main. Я не вижу того, что Вы пытаетесь мне показать. Можно поподробнее пожалуйста?
Спасибо.
Но в любом случае спасибо за наводку. Нужно будет ещё раз перечитать области видимости переменных.
Удаление файла сидит в файнале, иначе файл не удаляется. При этом не появляется никакой эксепшн… Не знаю в чём причина. Но с файнал стейтментом — работает.
Я так понимаю эти методы так же работаю и со списком. При этом приблизительно будут сравниваться элементы списка. Так?
Если их не объявить глобальными, то достучаться до них из тела функции можно будет только объявляя их внутри функции как nonlocal или опять таки global. Проще один раз это сделать во внешнем окружении.
Хотя как пример такого шаблона с OptionParser и UnitTest — может и ничего.
Пока существует только единственный русский перевод? Или это я такой удачливый — попал на не лучший экземпляр…
Действительно работает. Спасибо, мил человек. Одной проблемой меньше.
Хотя я научился передавать команду сессии скрина, это тоже полезный навык для моих симуляций на блейдами. (это я опять просто так бурчу, что бы хоть как-то оправдаться =)
Ой! «Avahi/Zeroconf support» а вот это особенно порадовало. Всё — проэкт на завтра, заводим свой трактор с блекджеком.
Ни у в оправдание хотелось бы ещё сказать, что rhythmbox обладает целым набором положительных черт. Он лёгок на подъём, система плагинов с вполне приличным функционалом, каталогизация и плейлисты, и, что не самое последнее, сносная работа с iPOD'ами.
— отличная опция для перевода. Будут одновременно скроллиться все окна.
Спасибо за ролик. Давно хотел Феймана увидеть воочию.