def _start_process(self, classpath):
        """Given a classpath prepared for running ENSIME, spawns a server process
        in a way that is otherwise agnostic to how the strategy installs ENSIME.

        Args:
            classpath (list of str): list of paths to jars or directories
            (Within this function the list is joined with a system dependent
            path separator to create a single string argument suitable to
            pass to ``java -cp`` as a classpath)

        Returns:
            EnsimeProcess: A process handle for the launched server.
        """
        cache_dir = self.config['cache-dir']
        java_flags = self.config['java-flags']
        iswindows = os.name == 'nt'

        Util.mkdir_p(cache_dir)
        log_path = os.path.join(cache_dir, "server.log")
        log = open(log_path, "w")
        null = open(os.devnull, "r")
        java = os.path.join(self.config['java-home'], 'bin', 'java.exe' if iswindows else 'java')

        if not os.path.exists(java):
            raise InvalidJavaPathError(errno.ENOENT, 'No such file or directory', java)
        elif not os.access(java, os.X_OK):
            raise InvalidJavaPathError(errno.EACCES, 'Permission denied', java)

        args = (
            [java, "-cp", (';' if iswindows else ':').join(classpath)] +
            [a for a in java_flags if a] +
            ["-Densime.config={}".format(self.config.filepath),
             "org.ensime.server.Server"])
        process = subprocess.Popen(
            args,
            stdin=null,
            stdout=log,
            stderr=subprocess.STDOUT)
        pid_path = os.path.join(cache_dir, "server.pid")
        Util.write_file(pid_path, str(process.pid))

        def on_stop():
            log.close()
            null.close()
            with catch(Exception):
                os.remove(pid_path)

        return EnsimeProcess(cache_dir, process, log_path, on_stop)
def _start_process ( self , classpath ) : cache_dir = self . config [ 'cache-dir' ] java_flags = self . config [ 'java-flags' ] iswindows = os . name == 'nt' Util . mkdir_p ( cache_dir ) log_path = os . path . join ( cache_dir , "server.log" ) log = open ( log_path , "w" ) null = open ( os . devnull , "r" ) java = os . path . join ( self . config [ 'java-home' ] , 'bin' , 'java.exe' if iswindows else 'java' ) if not os . path . exists ( java ) : raise InvalidJavaPathError ( errno . ENOENT , 'No such file or directory' , java ) elif not os . access ( java , os . X_OK ) : raise InvalidJavaPathError ( errno . EACCES , 'Permission denied' , java ) args = ( [ java , "-cp" , ( ';' if iswindows else ':' ) . join ( classpath ) ] + [ a for a in java_flags if a ] + [ "-Densime.config={}" . format ( self . config . filepath ) , "org.ensime.server.Server" ] ) process = subprocess . Popen ( args , stdin = null , stdout = log , stderr = subprocess . STDOUT ) pid_path = os . path . join ( cache_dir , "server.pid" ) Util . write_file ( pid_path , str ( process . pid ) ) def on_stop ( ) : log . close ( ) null . close ( ) with catch ( Exception ) : os . remove ( pid_path ) return EnsimeProcess ( cache_dir , process , log_path , on_stop )
Given a classpath prepared for running ENSIME, spawns a server process
        in a way that is otherwise agnostic to how the strategy installs ENSIME.

        Args:
            classpath (list of str): list of paths to jars or directories
            (Within this function the list is joined with a system dependent
            path separator to create a single string argument suitable to
            pass to ``java -cp`` as a classpath)

        Returns:
            EnsimeProcess: A process handle for the launched server.