
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')