Possible Duplicate:
subprocess with timeout
What is the easiest way to do the following in Python:
I would like something like this:
import proc
try:
    status, stdout, stderr = proc.run(["ls", "-l"], timeout=10)
except proc.Timeout:
    print "failed"
                Note on linux with coreutils >= 7.0 you can prepend timeout to the command like:
timeout 1 sleep 1000
                        I hate doing the work by myself. Just copy this into your proc.py module.
import subprocess
import time
import sys
class Timeout(Exception):
    pass
def run(command, timeout=10):
    proc = subprocess.Popen(command, bufsize=0, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    poll_seconds = .250
    deadline = time.time()+timeout
    while time.time() < deadline and proc.poll() == None:
        time.sleep(poll_seconds)
    if proc.poll() == None:
        if float(sys.version[:3]) >= 2.6:
            proc.terminate()
        raise Timeout()
    stdout, stderr = proc.communicate()
    return stdout, stderr, proc.returncode
if __name__=="__main__":
    print run(["ls", "-l"])
    print run(["find", "/"], timeout=3) #should timeout
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With