pythonstreamconsolesubprocess

Live-output / stream from Python subprocess


I am using Python and it's subprocess library to check output from calls using strace, something in the matter of:

subprocess.check_output(["strace", str(processname)]) 

However, this only gives me the output after the called subprocess already finished, which is very limiting for my use-case.

I need a kind of "stream" or live-output from the process, so I need to read the output while the process is still running instead of only after it finished.

Is there a convenient way to achieve this using the subprocess library? I'm thinking of a kind of poll every x seconds, but did not find any hints regarding on how to implement this in the documentation.

Many thanks in advance.


Solution

  • Had some problems referencing the selected answer for streaming output from a test runner. The following worked better for me:

    import subprocess
    from time import sleep
    
    def stream_process(process):
        go = process.poll() is None
        for line in process.stdout:
            print(line)
        return go
    
    process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while stream_process(process):
        sleep(0.1)