def run_command(command, timeout=15): process = subprocess.Popen( command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) # return_code = process.wait() # Waits for the process to finish. May lead to deadlock try: stdout, stderr = process.communicate(timeout) # Read data from stdout and stderr except subprocess.TimeoutExpired: process.kill() # Kill running subprocess to cleanup properly result = stderr.decode('utf-8') if process.returncode \ else stdout.decode('utf-8') return process.returncode, result