import shlex
import datetime
import subprocess
import time
def DoShell(cmd, cwd=None, timeout=2, shell=False):
if shell:
cmd_string_list = cmd
else:
cmd_string_list = shlex.split(cmd)
end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
if timeout:
end_time = datetime.datetime.now()
sub=subprocess.Popen(cmd_string_list, cwd=cwd, stdin=subprocess.PIPE, shell=shell, bufsize=4096)
while sub.poll() is None:
time.sleep(0.1)
if timeout:
if end_time <= datetime.datetime.now():
raise Exception('Timeout:{}'.format(cmd))
return str(sub.returncode)
if __name__ == "__main__":
DoShell('ls')