I need to do the following in Python. I want to spawn a process (subprocess module?), and:
What is the most elegant way to accomplish this?
The subprocess
module will be your friend. Start the process to get a Popen
object, then pass it to a function like this. Note that this only raises exception on timeout. If desired you can catch the exception and call the kill()
method on the Popen
process. (kill is new in Python 2.6, btw)
import time
def wait_timeout(proc, seconds):
"""Wait for a process to finish, or raise exception after timeout"""
start = time.time()
end = start + seconds
interval = min(seconds / 1000.0, .25)
while True:
result = proc.poll()
if result is not None:
return result
if time.time() >= end:
raise RuntimeError("Process timed out")
time.sleep(interval)