Падение процесса python при работе с документом через UNO

Автор lutermaks, 23 марта 2026, 11:48

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

lutermaks

Добрый день.

Есть python код, который работает с LO через UNO.
Пришел некий документ, который вызвал падение процесса python, при этом процесс LO жив.
Есть ли у кого способ воспроизведения такого падения?
Пробовал модифицировать по разному docx документ, например, добавлял циклические ссылки, но все попытки свелись просто к возникновения исключения. Нужно как-то сломать uno мост или сам офис, чтобы это привело к падения python.
Также возникает вопрос, если процесс офиса остается жить, то будет ли он работоспособен, если заново создать мост uno?

sokol92

#1
Цитата: lutermaks от 23 марта 2026, 11:48Пришел некий документ, который вызвал падение процесса python, при этом процесс LO жив.
Какие функции выполнял запущенный скрипт Python до открытия документа?

Из опыта: если скрипт на Python является слушателем событий, то при возникновении не перехваченной ошибки в скрипте возникают проблемы вплоть до аварийного завершения LO.
Владимир.

lutermaks

До открытия документа - это получение файла, запуск процесса офиса, создание моста uno

economist

Можно пересохранить DOCX в ODT и проверить как измененный UNO-скрипт отработает с ним. Не видя скрипта - сложно угадать к каким спецобъектам лезет UNO-мост. А пытаться вызывать падение правками - ну это не научно  ;) 
Пить не буду коньяка - читану Питоньяка!

lutermaks

Допустим есть задача - уронить процесс python, который работает с UNO, но процесс офиса после падения python должен жить (завис к примеру). Поэтому не так важно какой скрипт, важно как организовать документ, чтобы к такому привести. Ситуация может валиться как при открытии документа, так и при сохранении в другой формат. Также может быть добавление новых страниц в документе, вставка картинок. Мне кажется, что отвал происходит при открытии файла. Мне удалось создать похожую ситуацию, когда процесс офиса виснет, uno не откликается, но правда процесс python живет. Я сделал в документе таблицу с 10 000 колонками.

sokol92

А для чего нужно, чтобы LibreOffice работал под управлением Python?
Если у Вас есть документ, который нужно открыть в LibreOffice, то Вы можете открывать его обычным образом через команду операционной системы. Если приложение LibreOffice в этот момент уже открыто, то новый документ будет открыт в запущенном ранее экземпляре. 
Владимир.

lutermaks

Ну, например для массовой автоматической обработки документов

economist

Для это не нужен uno. Работайте с имеющимися odt ods сторонними либами из внешнего python. Тут вам и отладка всех видов, и минус один сложный слой.
Пить не буду коньяка - читану Питоньяка!

lutermaks


kompilainenn

Цитата: lutermaks от 23 марта 2026, 11:48Есть python код, который работает с LO через UNO.
Пришел некий документ, который вызвал падение процесса python
Запустить в режиме отладки скрипт нельзя?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

economist

UNO нужен если приходится макросом создавать документ с чистого листа, без содержимого, без шаблонов, стилей, DDE-разделов итд. Это обычно непростой путь с простынями кода.

Во многих более простых кейсах ODF-документы уже существуют (намек был в #6), надо их лишь немного изменить скриптом. Например, заменить десятки плейсхолдеров в договоре <сторона1> на 'ООО "Ромашка"'. пересчитать сумму Итого в текстовой таблице1, просклонять существительные женского рода в предмете договораи итд. Для этого можно использовать внешний Python с небольшими  сторонними либами (не pyuno/uno), не полагаясь на LibreOffice, запущенный как headless-процесс. Эти либы работают с файлом ODS/ODT как с архивом-компаундом, что часто быстрее и проще.
Пить не буду коньяка - читану Питоньяка!