Thanks Matthew! That’s close to what I’m using. However, would you mind sharing your “close document” code, as well as shutting down the soffice process?
In that context, it looks like you’re using the soffice process as the server? How about projects like listed in this question: https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=75523 What about scalability as per this question: https://forum.openoffice.org/en/forum/viewtopic.php?f=6&t=74002 Thank you, Jens > On Oct 19, 2017, at 18:26, Matthew Francis <mjay.fran...@gmail.com> wrote: > > On 19 October 2017 at 15:05, Jens Tröger <jens.troe...@light-speed.de> wrote: >> The termination of the process p seems to destroy the other running soffice >> process. Hence using custom user installations with >> -env:UserInstallation=/tmp/random-dir but that just prolongs the process >> creation noticeably! > > One alternative to allowing LO to create a new user installation each > time (which will indeed be slow) is to create a fresh user > installation once, save it somewhere as a template, then make a new > copy of the template directory each time - a file level copy should be > considerably faster. > You can accomplish this simply in Python using shutil.copytree() > > Some sample code appended below - this is hacked out from a previous > project, and may or may not represent best practice as to how to do > this, but does work. > > Regards > Matthew Francis > > > #!/usr/bin/python3 > > import os > import re > import shutil > import subprocess > import tempfile > import time > import uno > import uuid > > from com.sun.star.connection import NoConnectException > > sofficePath = '/usr/bin/soffice' > tempDir = tempfile.mkdtemp() > > # Restore cached profile if available > userProfile = tempDir + '/profile' > cacheDir = os.getenv('XDG_CACHE_DIR', os.environ['HOME'] + '/.cache') > + '/lo_profile_cache' > if os.path.isdir(cacheDir): > shutil.copytree(cacheDir, userProfile) > profileCached = True > else: > os.mkdir(userProfile) > profileCached = False > > # Launch LibreOffice server > pipeName = uuid.uuid4().hex > args = [ > sofficePath, > '-env:UserInstallation=file://' + userProfile, > '--pidfile=' + tempDir + '/soffice.pid', > '--accept=pipe,name=' + pipeName + ';urp;', > '--norestore', > '--invisible' > ] > sofficeEnvironment = os.environ > sofficeEnvironment['TMPDIR'] = tempDir > proc = subprocess.Popen(args, env=sofficeEnvironment, preexec_fn=os.setsid) > > # Open connection to server > for i in range(100): > try: > localContext = uno.getComponentContext() > resolver = > localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", > localContext) > context = > resolver.resolve("uno:pipe,name=%s;urp;StarOffice.ComponentContext" % > pipeName) > break > except NoConnectException: > time.sleep(0.1) > if i == 99: > raise > > # Cache profile if required > if not profileCached: > shutil.copytree(userProfile, cacheDir) > > > desktop = > context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", > context) > desktop.loadComponentFromURL('private:factory/swriter', 'blank', 0, ()) > > # ... clean up temporary directory when done (omitted) > -- Jens Tröger http://savage.light-speed.de/ _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice