首页 > 代码库 > Python subprocess + timeout的命令执行

Python subprocess + timeout的命令执行

 

Popen对象

  • poll() 判断是否执行完毕,执行完毕返回0,未执行完毕返回None
  • terminate() 终止进程发送SIGTERM信号
  • raise 自定义返回错误
import time  import subprocess    class TimeoutError(Exception):      pass    def command(cmd, timeout=60):      """执行命令cmd,返回命令输出的内容。     如果超时将会抛出TimeoutError异常。     cmd - 要执行的命令     timeout - 最长等待时间,单位:秒     """      p = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True)      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:              p.terminate()              raise TimeoutError(cmd, timeout)          time.sleep(0.1)      return p.stdout.read()    if __name__ == "__main__":      print command(cmd=‘ping www.redicecn.com‘, timeout=1) 

  

Python subprocess + timeout的命令执行