def __init__(self, wid, cmd, wdir, shell, uid=None, gid=None, env=None): self.wid = wid self.wdir = wdir self.shell = shell self.env = env self.cmd = cmd.replace('$WID', str(self.wid)) self.uid = to_uid(uid) self.gid = to_gid(gid) def preexec_fn(): if self.gid: try: os.setgid(self.gid) except OverflowError: if not ctypes: raise # versions of python < 2.6.2 don't manage unsigned int for # groups like on osx or fedora os.setgid(-ctypes.c_int(-self.gid).value) if self.uid: os.setuid(self.uid) self._worker = Popen(self.cmd.split(), cwd=self.wdir, shell=self.shell, preexec_fn=preexec_fn, env=self.env) self.started = time.time()
def test_get_info(self): worker = Popen(['top'], shell=True) try: info = worker.get_info() finally: worker.terminate() self.assertTrue(isinstance(info['pid'], int)) self.assertEqual(info['nice'], 0)