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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容