Search code examples
pythontimeoutsubprocess

Timeout on subprocess readline in Python


I have a small issue that I'm not quite sure how to solve. Here is a minimal example:

What I have

scan_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while(some_criterium):
    line = scan_process.stdout.readline()
    some_criterium = do_something(line)

What I would like

scan_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while(some_criterium):
    line = scan_process.stdout.readline()
    if nothing_happens_after_10s:
        break
    else:
        some_criterium = do_something(line)

I read a line from a subprocess and do something with it. How can I exit if no line arrived after a fixed time interval?


Solution

  • Thanks for all the answers!

    I found a way to solve my problem by simply using select.poll to peek into standard output.

    import select
    ...
    scan_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    poll_obj = select.poll()
    poll_obj.register(scan_process.stdout, select.POLLIN)
    while(some_criterium and not time_limit):
        poll_result = poll_obj.poll(0)
        if poll_result:
            line = scan_process.stdout.readline()
            some_criterium = do_something(line)
        update(time_limit)