python exec shell cmd with timeout

from subprocess import Popen

@staticmethod
def shell_cmd_timeout(cmd, timeout=0, cwd=None, env=None):
    cmd_open = Popen(cmd, shell=True, cwd=cwd, env=env)
    if not cmd_open:
        return -1
    t_timeout = timeout
    tick = 3
    ret = None
    while True:
        time.sleep(tick)
        ret = cmd_open.poll()
        if ret is not None:
            break
        if t_timeout > 0:
            t_timeout -= tick
        if t_timeout <= 0:
            # timeout, kill command
            try:
                cmd_open.kill()
                cmd_open.wait()
            except OSError:
                pass
            ret = -99999
            break
    return ret

你可能感兴趣的:(python exec shell cmd with timeout)