Лог ошибок Python в Ubuntu

Автор karpo518, 26 июля 2017, 19:22

0 Пользователи и 1 гость просматривают эту тему.

karpo518

Пытаюсь устранить ошибку в установленном расширении. Сама ошибка, предположительно, связана с неправильно упаковкой расширения, а не с самим кодом. Ошибка вылетает в системном скрипте /usr/lib/libreoffice/program/pythonscript.py в функции:

   def getStorageUrlFromPersistentUrl( self, url):
       ret = url
       if self.rootUrl:
           pos = len(self.rootUrl)+1
           packageName = url[pos:url.find("/",pos+1)]
           package = self.mapPackageName2Path[ packageName ]
           ret = url[0:pos]+ package.transientPathElement + "/" + url[pos:len(url)]
       log.debug( "getStorageUrlFromPersistentUrl " + url + " -> "+ ret)
       return ret


Происходит запрос значения packageName, отсутствующего в словаре. Как мне понять, какие варианты есть в словаре и какой запрашивается?

Пытался записать значение packageName в файл или вывести его в логе через log.debug(packageName). Но записать в файл не получается, скорее всего потому что у скрипта нет прав.

А лог лежит непонятно где, если вообще ведется. В скрипте pythonloader.py выставлено значение DEBUG = 1, но единственный найденный файл лога /home/username/.config/libreoffice/4/user/extentions/share/log.txt имеет какие-то записи, связанные работой расширения, но мои кастомные выводы не содержит.
Выглядит вот так:
###### Progress log entry 2017-07-19 09:00:53 ######
###### Progress log entry 2017-07-26 13:38:12 ######
###### Progress log entry 2017-07-26 13:39:04 ######
###### Progress log entry 2017-07-26 13:39:44 ######
###### Progress log entry 2017-07-26 13:40:45 ######
###### Progress log entry 2017-07-26 13:44:28 ######
###### Progress log entry 2017-07-26 13:52:34 ######
###### Progress log entry 2017-07-26 13:53:18 ######
###### Progress log entry 2017-07-26 13:53:51 ######
###### Progress log entry 2017-07-26 13:55:02 ######
###### Progress log entry 2017-07-26 14:18:08 ######
###### Progress log entry 2017-07-26 14:19:47 ######
###### Progress log entry 2017-07-26 14:21:45 ######
###### Progress log entry 2017-07-26 15:04:27 ######
###### Progress log entry 2017-07-26 15:33:47 ######
###### Progress log entry 2017-07-26 18:50:24 ######
###### Progress log entry 2017-07-26 18:54:47 ######
###### Progress log entry 2017-07-26 18:56:04 ######
###### Progress log entry 2017-07-26 19:08:17 ######




Как можно продебажить этот скрипт, чтобы понять, что ему не нравится?
Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2

karpo518

Расковырял скрипт запуска макросов на Python. Выяснилось, что для правильной компиляции, нужно сложить все скрипты в отдельную папку и подключить её как библиотеку:
beginAnnexes
  useLibrary("Python", "scripts/")
endAnnexes


В противном случае программа не видит скриптов. Вообще конечно компиляция Python-расширения - то ещё приключение для новичка)
Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2

mikekaganski

Если возможно, не могли бы Вы оформить свой опыт в форме статьи - для новичков, с указанием, что оказалось неочевидным, и с пошаговой инструкцией?
С уважением,
Михаил Каганский

karpo518

Здравствуйте. Написание макросов не является моей основной деятельностью и никогда не станет ей. Макрос потребовался в качестве дополнительного инструмента для организации, в которой я работаю.  Решил запаковать его для удобного распространения и обновления. Написал небольшую инструкцию по компиляции простого расширения на Python. Используйте её, если будет уместно.

Для компиляции необходимо проделать следующие действия:

1. Скачиваем последнюю версию Extension Compiler на странице https://wiki.openoffice.org/wiki/Extensions_Packager
По сути это шаблон нового документа со встроенными макросами на Basic

2. Запускаем файл двойным щелчком мыши. OpenOffice предложит сохранить новый документ. Если вместо этого выскочило сообщение о том, что макросы заблокированы, потребуется разрешить их выполнение в Сервис->Параметры->Безопасность->Безопасность максросов указываем папку, в которой разрешаем выполнение макросов и запускаем файл из неё.

3. Сохраняем документ в папке с файлами будущего расширения использую имя приложения.

4. Запускаем сохраненный файл и отрываем макросы документа в Сервис->Максросы->Управление макросами-> LibreOffice Basic.. раскрываем список совпадающий с именем файлов и вложенный в него список Standard. Выбираем макрос Module1, нажимаем "Правка". Этот макрос должен содержать ваши инструкции для компиляции на языке Basic. Заменяем код на свой и сохраняем.

5. Запускаем компиляцию. Сам документ есть ничто иное как документация к Extension Compiler на английском языке. Помимо прочего она содержит в пункте 2.3 3 формы запуска компиляции. Выбираем форму по потребностям. У меня не получилось указать необходимую минимальную версию офисного пакета в форме компиляции под Openoffice и LibreOffice. При компиляции вылетала ошибка о некорректно указанной минимальной версии. Поэтому я использовал форму LibreOffice only. Указал минимальную версию 4.0(потому что нужна кнопка в панели расширений) и нажал кнопку Compile to LibreOffice only. Форма также может не сработать из-за некорректных настроек безопасностию При необходимости исправьте по аналогии с пунктом 2.

После нажатия кнопки мой документ перелистнулся в самое начало. Если у вас случилось то же самое, отмотайте его назад к форме и посмотрите на информацию в блоке "Compilation results". В случае успеха в блоке будет указано, какие файлы созданы в папке расширения. Иначе будет указана ошибка. Если причина ошибки неочевидна, убирайте из макроса компиляции инструкции, которые подозреваете в ошибке и пробуйте скомпилировать расширение повторно, пока компиляция не завершится без ошибок.

Ниже указал свой код с инструкциями для компиляции.
REM  *****  BASIC  *****
Option Explicit
Sub myExtension

'Блок описания: полное название расширения в рекомендованном документацией формате:  org.openoffice.autor_name.extention_name
beginDescription("org.openoffice.ivanov42.MyFirstExtention", "1.0.0")
   
    'Полное имя автора и ссылка на страницу с контактной информацией
    setPublisherName("en", "Ivan Ivanov", "http://ivanov.ru/")
   
    'Информация для автоматического обновления: путь, по которому будут храниться все версии приложения и информация для обновления
    'После компиляции получаем 2 файла: .oxt(само расширение) и .xml(информация для автоматического обновления). Оба файла должны быть доступны по указанному пути.
    'При выпуске новой версии, заливаем на сервер новый файл .oxt и заменяем файл .xml
    beginUpdateInformation("direct", "direct")
  setUpdateSource("http://ivanov.ru/upload/MyFirstExtention/", "http://ivanov.ru/upload/MyFirstExtention/")
    endUpdateInformation
endDescription

'Блок подключения дополнительных библиотек. Я не использовал дополнительных библиотек, но чтобы расширение видело мой код,
'пришлось закинуть единственный файл с кодом в отдельную папку и подключить как внешнюю библиотеку
beginAnnexes
  useLibrary("Python", "scripts/")
endAnnexes


'Блок элементов управления. Моё расширение имеет однуединственную функцию, которая должна запускаться с кнопки на панели инструментов в OpenOffice Writer
beginAddonUI
  beginOfficeToolbar               
    beginButton
        'Указал, что кнопка требуется только для текстовых документов
        beginTitles("Writer")
          setTitle("Format", "en")
        endTitles
        'Указал имя файла и название функции, которую нужно запустить по кнопке
        setURL("Python", "scripts/common.py", "Main")
        'В папку images положил 4 изображения: image518_16.bmp, image518_16h.bmp, image518_26.bmp, image518_26h.bmp размером 16x16px и 26x26px, соответственно
        'Согласно документации достаточно одного изображения _16 в формате bmp или png
        setImage("images/image518")
    endButton
  endOfficeToolbar
endAddonUI

End Sub


После установки расширения и перезапуска OpenOffice Writer на панели инструментов появится плавающая область с кнопкой расширения. Её нужно переместить в удобное место. Если вместо этого закрыть эту область, то кнопку будет нельзя восстановить даже повторной установкой расширения. Потребуется сбрасывать профиль пользователя OpenOffice.
Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2