from socket import * import random, os, thread, signal def mount(filesystem, mount_point, options="fs=pylufs", callback_ready=None): handler = filesystem() serversock, serversockname = tempsock() try: try: os.chmod(serversockname, 0777) stop = [] def usr1Handler(*args): stop.append(True) signal.signal(signal.SIGUSR1, usr1Handler) os.system("lufsmnt '%s' %s,server_socket=%s,server_pid=%d &" % ( mount_point, options, serversockname, os.getpid())) while not stop: try: sock, addr = serversock.accept() except error: if stop: break raise print 'connected' if handler is None: handler = filesystem() elif callback_ready: callback_ready() thread.start_new_thread(handler.handle, (sock,)) handler = None sock = None finally: signal.signal(signal.SIGUSR1, signal.SIG_IGN) if not stop: os.system("lufsumount '%s'" % (mount_point,)) finally: try: os.unlink(serversockname) except OSError: pass def tempsock(base='/tmp/tmp_pylufs'): sock = socket(AF_UNIX, SOCK_STREAM) for i in range(32): name = '%s%d' % (base, random.randrange(1000000)) try: sock.bind(name) except error: pass else: break else: raise sock.listen(5) return sock, name