Подключение к LibreOffice с именованными каналами - PullRequest
4 голосов
/ 19 марта 2012

Я могу нормально подключаться к сокетам, но я слышал, что использование каналов быстрее, когда все локально, поэтому я хотел попробовать, но не могу подключиться.

Я запускаю Libre с

 > soffice --headless --invisible --norestore --nodefault --nolockcheck --nofirstwizard --accept='pipe,name=ooo_pipe;urp;'

А минимальный скрипт на python, который должен работать, но не работает, -

import uno
from com.sun.star.connection import NoConnectException

pipe = 'ooo_pipe'
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)
context = resolver.resolve("uno:pipe,name=%s;urp;StarOffice.ComponentContext" % pipe)

1 Ответ

6 голосов
/ 26 марта 2012

Я использовал режим сокетов до сих пор.Только что протестированный канал на моей машине с помощью cmd:

/usr/lib/openoffice/program/soffice.bin -accept='pipe,name=foo;urp;StarOffice.ServiceManager' -nologo -headless -nofirststartwizard -invisible

$ lsof -c soffice|egrep "pipe|foo"
soffice.b 6698 user    3r  FIFO                0,8      0t0 15766935 pipe
soffice.b 6698 user    4w  FIFO                0,8      0t0 15766935 pipe
soffice.b 6698 user   15u  unix 0xffff88009773ed00      0t0 15767001 /tmp/OSL_PIPE_1000_foo

lsof показывает, что существует именованный сокет foo и все в порядке, чтобы получить соединение в Python.В начале эксперимента были случаи, когда foo не генерировался, и, следовательно, возникало исключение com.sun.star.connection.NoConnectException.Но я не могу повторить эту ошибку после этого.

Мы использовали безголовый аппарат в режиме сокетов в производстве уже несколько лет, и он очень стабильный и достаточно быстрый.Кажется, что конвейерный режим здесь все еще зависит от сокета Unix, поэтому я предлагаю использовать режим сокета.

...