python 设置方法超时

发布时间:2019-08-27 08:16:40编辑:auto阅读(2277)

    #!/usr/bin/python
    #-*-coding:utf-8-*-
    import os,time,signal,platform,subprocess
    
    class TimeoutError(Exception):
        pass
    
    def run_command(cmd, timeout=60):
        is_linux = platform.system() == 'Linux'
        
        p = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid if is_linux else None)
        t_beginning = time.time()
        seconds_passed = 0
        while True:
            if p.poll() is not None:
                break
            seconds_passed = time.time() - t_beginning
            if timeout and seconds_passed > timeout:
                if is_linux:
                    os.killpg(p.pid, signal.SIGTERM)
                else:
                    p.terminate()
                raise TimeoutError(cmd, timeout)
            time.sleep(0.1)
        return p.stdout.read()
    
    if __name__ == '__main__':
        cmd = 'ping www.google.com
        timeout = 10
        try:
            result = run_command(cmd, timeout)
        except TimeoutError:
            print 'excute command=<%s> timeout after %i' %(cmd,timeout)
        else:
            print = 'other error'
    

关键字