В этой главе сказа про дружбу C++ и Python будет на удивление мало использования Boost.Python. Передача исключений туда и обратно является по сути слабым местом данной библиотеки. Будем обходиться родным API языка Python, а где это возможно использовать Boost.Python.
Тем не менее Boost.Python создаёт окружение, в котором исключения из C++ попадают в Python в виде стандартного RuntimeError, а обратно из Python генерируется исключение C++ типа error_already_set, что означает «тебе что-то прилетело, сходи сам почитай что там». И вот здесь нам как раз будет не лишним использовать C-API языка Python, чтобы вычитать необходимую информацию об исключении и преобразовать в соответствующий класс сообразно логике приложения.
К чему такие сложности? — Дело в том, что в Python, в отличие от C++, кроме текста исключения и его типа приходит ещё и traceback — стек до места возникновения исключения. Давайте немного расширим стандартный std::exception дополнительным параметром для этого stacktrace, а заодно напишем конвертер исключений туда и обратно из классов C++ в классы исключений Python.
Читать полностью »
Рубрика «python3» - 20
Настраиваем Eclipse PyDev под отладку Python 3.x с честным юникодом и кириллицей
2013-01-30 в 21:46, admin, рубрики: debug, eclipse, IDE, python, python3, Unicode, utf-8, кириллица, настройка, отладка, Программирование, Юникод, метки: debug, Eclipse, IDE, python, python3, Unicode, utf-8, кириллица, настройка, отладка, Юникод Однажды, холодным зимним вечером, я внезапно вспомнил, что не поделился простым секретом, как добиться простого питоновского счастья за пределами ASCII резервации в такой замечательно-бесплатной IDE как Eclipse с плагином PyDev. Причём счастья с отладкой и честным юникодом, что означает следующее: если вы назвали свою переменную кириллицей, вы сможете посмотреть у неё значение, поставив breakpoint, написать пару строк текста по-русски и у вас ничего не отвалится.
Да-да, уважаемый читатель, Eclipse PyDev не очень-то дружит с символами за пределами 0x7F и отладка очень любит отваливаться всякий раз при попытке прочитать значение кириллической переменной. Да какое там, простое наведение мышкой на юникодовый символ приводит к фатальным последствиям при отладке кода написанного на Python 3.x (UTF-8). Если же настройки вашей файловой системы отличаются от UTF-8, поздравляю, вы не сможете даже запустить ваш скрипт. Я имею в виду именно то, что например под Windows ваш замечательный скрипт с единственным словом по-русски просто выведет из строя PyDev.
Возможно я перестарался, сгущая краски, не пугайтесь, починить это в состоянии мы сами, просто прочитав эту небольшую инструкцию. В награду мы получим бесплатное средство разработки, довольно удобное, фантастически гибкое в настройках и усовершенствовании, вплоть до разработки на нескольких языках, со встроенным инструментом версионирования.
Под катом инструкция и неприличных размеров картинки.
Читать полностью »
Парсим список ваканский средствами Python
2013-01-21 в 21:52, admin, рубрики: grab, python, python3, script, метки: grab, python, python3, scriptНа Хабре уже была заметка, как вытащить и распарсить список вакансий с hh.ru.
Однако там использовался C# — язык сложных предложений с хитрыми интерфейсами. Что же касается обработки больших «простыней» однотипных данных, то для мелких задач в этой области испокон веку применяют скриптовые языки.
Вот и написался небольшой скрипт на python, который утаскивает с hh.ru список вакансий по некоторому запросу (пишется в переменную searchParam) и выводит их в формате CSV. Можно выводить на экран и удивляться, можно перенаправить в output.csv и открыть в каком-нибудь табличном редакторе.
Читать полностью »
Дружим Python 3 с MS Visual C++. Строим мост в Boost.Python с автоматической перекодировкой
2012-12-09 в 3:16, admin, рубрики: boost, boost.python, c++, c++11, microsoft, python, python 3.3, python3, visual c++, Visual Studio, visual studio 2012, windows, Программирование, С++, метки: boost, boost.python, c++11, microsoft, python, python 3.3, python3, visual c++, Visual Studio, visual studio 2012, windows, С++Всем доброго {daytime}!
Сегодня пришла пора рассказать вам о фундаментальной проблеме перекодировки при взаимодействии проекта собранного на MS Visual C++ на платформе Windows и наиболее приятной скриптовой обвязки для языка C++, благодаря библиотеке Boost.Python, собственно написанной для языка Python.
Вы ведь хотите использовать для вашего приложения на C++ под ОС Windows хорошую скриптовую обвязку на последней версии Python 3.x, либо вы хотите использовать для вашего приложения на Python максимально ускоренный участок кода вашего модуля, переписанный на C++. В обоих случаях, если вы знаете оба языка как минимум хорошо, вам стоит это прочитать.
Читать полностью »
Питон в коробке – venv в python 3.3
2012-11-05 в 17:37, admin, рубрики: deployment, deployment tools, python, python 3.3, python3, метки: deployment, deployment tools, python 3.3, python3Наверняка, большинство из тех, кто разрабатывает или деплоит Python приложения, использует виртуальные окружения. В частности через virtualenv, написанный Ian Bicking.
Идея оказалась так хороша и распостранена, что нечно похожее теперь присутствует в Python 3.3 из коробки в виде модуля venv. Он почти такой же, как virtualenv, только немного лучше. Читать полностью »