I have successfully solved the problem. the solution is import subprocess, signal, os, threading, errno from contextlib import contextmanager class TimeoutThread(object): def __init__(self, seconds): self.seconds = seconds self.cond = threading.Condition() self.cancelled = False self.thread = threading.Thread(target=self._wait) def run(self): """Begin the timeout.""" self.thread.start() def _wait(self): with self.cond: self.cond.wait(self.seconds) if not self.cancelled: self.timed_out() def cancel(self): """Cancel the timeout, if it hasn't yet occured.""" with self.cond: self.cancelled = True self.cond.notify() self.thread.join() def timed_out(self): """The timeout has expired.""" raise NotImplementedError class KillProcessThread(TimeoutThread): def __init__(self, seconds, pid): super(KillProcessThread, self).__init__(seconds) self.pid = pid def timed_out(self): try: os.kill(self.pid, signal.SIGKILL) // this is for linux you need to change it for windows except OSError,e: # If the process is already gone, ignore the error. if e.errno not in (errno.EPERM, errno. ESRCH): raise e @contextmanager def processTimeout(seconds, pid): timeout = KillProcessThread(seconds, pid) timeout.run() try: yield finally: timeout.cancel() def example(cmd): proc = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE) //setting the timeout to be 1 sec with processTimeout(1, proc.pid): stdout,stderr=proc.communicate() resultcode = proc.wait() if resultcode < 0: #print "error: %i" % resultcode return resultcode,0 else: return stdout,stderr //This is used to create new subprocess and it will return output as well as error output,err=example(["python",filepath,"5"])