#! /usr/bin/env python import sys, os import py, lufs # fork read_end, write_end = os.pipe() pid = os.fork() if pid: # in the parent: wait for the child and exit os.close(write_end) ch = os.read(read_end, 1) sys.exit(ch == "!") # in the child try: os.close(read_end) def detach(): global write_end os.setsid() fd = os.open('/dev/null', os.O_RDWR) try: # detach from parent os.dup2(fd, 1) os.dup2(fd, 2) os.dup2(fd, 0) except OSError: pass os.close(fd) os.write(write_end, ".") os.close(write_end) write_end = None if not sys.argv[1].startswith('-'): sys.argv.insert(1, '-4') version, hostname, mountpoint = sys.argv[1:] if version == '-1': from execnetfs import ExecNetFSFactory elif version == '-2': from execnetfs2 import ExecNetFSFactory elif version == '-3': from execnetfs3 import ExecNetFSFactory elif version == '-4': from execnetfs4 import ExecNetFSFactory else: raise ValueError, version gw = py.execnet.SshGateway(hostname) lufs.mount(ExecNetFSFactory(gw), mountpoint, callback_ready = detach) finally: if write_end is not None: os.write(write_end, "!")