Я пытаюсь разработать макросы Libreoffice Cal c python в Pycharm. Я хочу провести тест внутри Pycharm. Тесты работают нормально, когда libreoffice запускается за пределами Pycharm, но не удается, когда я пытаюсь запустить его непосредственно из Pycharm.
Я пробовал 2 разных варианта запуска libreoffice.
Из моего терминала Ubuntu
/opt/libreoffice6.4/program/soffice --calc --accept="pipe,name=lopipe;urp;StarOffice.ServiceManager" --nologo&
С функцией python:
args = ["/opt/libreoffice6.4/program/soffice", "--calc",
"--accept=\"pipe,name=lopipe;urp;StarOffice.ServiceManager\""]
subprocess.Popen(args, universal_newlines=True)
Следующий код дает мне активный лист.
def current_active_sheet():
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", localContext)
ctx = resolver.resolve("uno:pipe,name=lopipe;urp;StarOffice.ComponentContext")
desktop = ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)
model = desktop.getCurrentComponent()
return model.CurrentController.ActiveSheet
Когда Libreoffice запускается с терминала Ubuntu, Функция current_active_sheet
прекрасно работает внутри Pycharm, вызываемой, например, из тестовых модулей. Но когда Libreoffice запускается из Pycharm с python subprocess.Popen
, функция вызывает исключение подключения, хотя libreoffice работает правильно.
Я пробовал это как с опциями сокета и канала для uno bridge, так и get такое же поведение.
Трассировки lsof
дают нечто странное, как если бы pycharm не передавал имя канала в систему.
Вот выдержка из результата lsof
, когда libreoffice имеет значение запускается из терминала ubuntu, есть ссылка на lopipe
soffice.b 13506 13517 yves 7u unix 0x0000000000000000 0t0 336561 /tmp/OSL_PIPE_1000_SingleOfficeIPC_6e6e1dcdf8a8f89eb21d8fe15230aa95 type=STREAM
soffice.b 13506 13517 yves 54u unix 0x0000000000000000 0t0 310587 /tmp/OSL_PIPE_1000_lopipe type=STREAM
и тот же фрагмент, когда Libreoffice запускается из Pycharm с subprocess.Popen
. Лопайпа вообще нет ...
soffice.b 13407 13418 yves 7u unix 0x0000000000000000 0t0 307196 /tmp/OSL_PIPE_1000_SingleOfficeIPC_6e6e1dcdf8a8f89eb21d8fe15230aa95 type=STREAM
soffice.b 13407 13419 yves 7u unix 0x0000000000000000 0t0 307196 /tmp/OSL_PIPE_1000_SingleOfficeIPC_6e6e1dcdf8a8f89eb21d8fe15230aa95 type=STREAM