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
网友评论