예제 #1
0
def run_server(argv):
    import getopt
    do_daemon = True
    pidfile = None
    try:
        optlist, args = getopt.getopt(argv[1:], "nh?p:")
    except getopt.GetoptError:
        print(_DOC)
        sys.exit(2)

    for opt, optarg in optlist:
        if opt in ("-h", "-?"):
            print(_DOC)
            return
        elif opt == "-n":
            do_daemon = False
        elif opt == "-p":
            pidfile = optarg

    if do_daemon:
        from pycopia import daemonize
        daemonize.daemonize(pidfile=pidfile)

    logging.msg("qaagent", "initializing")
    h = pyro.register_server(PosixAgent())
    def _exit_checker(poller):
        if _EXIT:
            pyro.unregister_server(h)
    try:
        pyro.loop(2.0, _exit_checker)
    finally:
        if do_daemon and pidfile:
            os.unlink(pidfile)
예제 #2
0
def run_server(argv):
    import getopt
    do_daemon = True
    pidfile = None
    try:
        optlist, args = getopt.getopt(argv[1:], "nh?p:")
    except getopt.GetoptError:
        print(_DOC)
        sys.exit(2)

    for opt, optarg in optlist:
        if opt in ("-h", "-?"):
            print(_DOC)
            return
        elif opt == "-n":
            do_daemon = False
        elif opt == "-p":
            pidfile = optarg

    if do_daemon:
        from pycopia import daemonize
        daemonize.daemonize(pidfile=pidfile)

    logging.msg("qaagent", "initializing")
    h = pyro.register_server(PosixAgent())

    def _exit_checker(poller):
        if _EXIT:
            pyro.unregister_server(h)

    try:
        pyro.loop(2.0, _exit_checker)
    finally:
        if do_daemon and pidfile:
            os.unlink(pidfile)
예제 #3
0
 def subprocess(self, _meth, *args, **kwargs):
     """Run a python method asynchronously as a subprocess."""
     logging.msg("subprocess", str(_meth))
     pm = proctools.get_procmanager()
     proc = pm.submethod(_meth, args, kwargs)
     proc.callback = self._status_cb
     self._status[proc.childpid] = None
     return proc.childpid
예제 #4
0
 def subprocess(self, _meth, *args, **kwargs):
     """Run a python method asynchronously as a subprocess."""
     logging.msg("subprocess", str(_meth))
     pm = proctools.get_procmanager()
     proc = pm.submethod(_meth, args, kwargs)
     proc.callback = self._status_cb
     self._status[proc.childpid] = None
     return proc.childpid
예제 #5
0
 def pipe(self, cmd, user=None):
     """Run a subprocess, but connect by pipes rather than pty."""
     logging.msg("pipe", cmd, "user=", str(user))
     pm = proctools.get_procmanager()
     if type(user) is str:
         user = passwd.getpwnam(user)
     proc = pm.spawnpipe(cmd, pwent=user, callback=self._status_cb)
     text = proc.read()
     sts = proc.wait()
     proc.close()
     return sts, text
예제 #6
0
 def pipe(self, cmd, user=None):
     """Run a subprocess, but connect by pipes rather than pty."""
     logging.msg("pipe", cmd, "user=", str(user))
     pm = proctools.get_procmanager()
     if type(user) is str:
         user = passwd.getpwnam(user)
     proc = pm.spawnpipe(cmd, pwent=user, callback=self._status_cb)
     text = proc.read()
     sts = proc.wait()
     proc.close()
     return sts, text
예제 #7
0
 def run(self, cmd, user=None):
     """Run a subprocess, wait for completion and return status and
     stdout as text.
     """
     logging.msg("run", cmd, "user=", str(user))
     pm = proctools.get_procmanager()
     if type(user) is str:
         user = passwd.getpwnam(user)
     proc = pm.spawnpty(cmd, pwent=user)
     text = proc.read()
     sts = proc.wait()
     proc.close()
     return sts, text
예제 #8
0
 def run(self, cmd, user=None):
     """Run a subprocess, wait for completion and return status and
     stdout as text.
     """
     logging.msg("run", cmd, "user=", str(user))
     pm = proctools.get_procmanager()
     if type(user) is str:
         user = passwd.getpwnam(user)
     proc = pm.spawnpty(cmd, pwent=user)
     text = proc.read()
     sts = proc.wait()
     proc.close()
     return sts, text
예제 #9
0
 def kill(self, pid):
     """Kills a process that was started by spawn."""
     logging.msg("kill", str(pid))
     try:
         sts = self._status.pop(pid)
     except KeyError:
         return -errno.ENOENT
     else:
         if sts is None:  # a running process
             pm = proctools.get_procmanager()
             proc = pm.getbypid(pid)
             proc.kill()
             proc.wait()
             sts = self.poll(pid)
             return sts
         else:  # already exited
             return sts
예제 #10
0
 def kill(self, pid):
     """Kills a process that was started by spawn."""
     logging.msg("kill", str(pid))
     try:
         sts = self._status.pop(pid)
     except KeyError:
         return -errno.ENOENT
     else:
         if sts is None:  # a running process
             pm = proctools.get_procmanager()
             proc = pm.getbypid(pid)
             proc.kill()
             proc.wait()
             sts = self.poll(pid)
             return sts
         else:  # already exited
             return sts
예제 #11
0
 def _status_cb(self, proc):
     self._status[proc.childpid] = proc.exitstatus
     logging.msg("exited", str(proc.exitstatus))
예제 #12
0
 def _status_cb(self, proc):
     self._status[proc.childpid] = proc.exitstatus
     logging.msg("exited", str(proc.exitstatus))
예제 #13
0
            user = passwd.getpwnam(user)
        proc = pm.spawnpipe(cmd, pwent=user, callback=self._status_cb)
        text = proc.read()
        sts = proc.wait()
        proc.close()
        return sts, text

    def spawn(self, cmd, user=None, async=False):
        """Spawn a subprocess and return immediatly."""
        pm = proctools.get_procmanager()
        if type(user) is str:
            user = passwd.getpwnam(user)
        proc = pm.spawnpty(cmd, callback=self._status_cb, pwent=user, async=async)
        # status with a key present, but None value means a running process.
        self._status[proc.childpid] = None
        logging.msg("spawn", cmd, "user=%s async=%s pid=%d" % (user, async, proc.childpid))
        return proc.childpid

    def subprocess(self, _meth, *args, **kwargs):
        """Run a python method asynchronously as a subprocess."""
        logging.msg("subprocess", str(_meth))
        pm = proctools.get_procmanager()
        proc = pm.submethod(_meth, args, kwargs)
        proc.callback = self._status_cb
        self._status[proc.childpid] = None
        return proc.childpid

    def _status_cb(self, proc):
        self._status[proc.childpid] = proc.exitstatus
        logging.msg("exited", str(proc.exitstatus))